7

在我的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文件夹里?

有任何想法吗?

4

1 回答 1

9

我通常把我的工厂放到../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);

于 2013-09-18T07:25:01.380 回答