в моем Module.php меня есть методы обработки, которые я хотел бы переместить их в factory class чтобы я не загромождал Module class :
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 ?
есть идеи?
Обычно я помещаю свои фабрики в ../module/yourmodule/src/yourmodule/Factory .
в вашем ../module/yourmodule/config/module.config.php вам нужно настроить свой service_manager следующим образом:
'service_manager' => array( 'factories' => array( 'yourfactory' => 'yourmodule\Factory\yourfactory', ), ),
в yourfactory.php вам необходимо внедрить 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);