в моем 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);