2013-09-18 3 views
7

в моем Module.php я есть методы парование, что я хотел бы переместить их в factory class, так что я не буду загромождать Module class:Как создать завод в zend framework 2?

public function getControllerConfig() 
{ 
    return array(
     'factories' => array(
      'account-index' => function ($controllerManager) { 
       $serviceManager = $controllerManager->getServiceLocator(); 
       $accountService = $serviceManager->get('account-service'); 

       return new Controller\IndexController($accountService); 
      } 
     ) 
    ); 
} 

public function getServiceConfig() 
{ 
    return array(
     'factories' => array(
      'account-service' => function ($serviceManages) { 
       return new Service\Account; 
      } 
     ) 
    ); 
} 

прямо сейчас у меня есть:

и где должен я поставить это factory class, может быть, в папке Factory?

любые идеи?

ответ

8

Обычно я помещаю свои заводы в ../module/yourmodule/src/yourmodule/Factory.

в вашем ../module/yourmodule/config/module.config.php затем вы должны настроить service_manager так:

'service_manager' => array(
    'factories' => array(
     'yourfactory' => 'yourmodule\Factory\yourfactory', 
    ), 
), 

в yourfactory.php Затем вы должны implent в FactoryInterface и установить локатор сервиса. После того, как вы сделали это, вы должны быть в состоянии вызвать службу обычным способом для контроллеров, форм и т.д.

namespace Application\Factory; 

use Zend\ServiceManager\FactoryInterface; 
use Zend\ServiceManager\ServiceLocatorInterface; 

class yourfactory implements FactoryInterface 
{ 

private $config; 

private $serviceLocator; 

public function createService(ServiceLocatorInterface $serviceLocator) 
{ 
    return $servicelocator->get('Your\Service'); 
} 

После этого вы можете просто определить функции в вашем yourfactory.php. В вашем контроллере вы вызываете такие функции $serviceManager->get('yourfactory')->yourfunction(yourarguments);

+2

Почти. Фабрика должна возвращать только определенный Сервисный класс. Вы не должны использовать Factory, как это было бы Сервис или Модель. i.e: 'createService() {$ db = $ sl-> get ('db'); return = new Gateway ($ db); } ' – Sam

+0

спасибо, что указали это! – cptnk

 Смежные вопросы

  • Нет связанных вопросов^_^