Zend框架2服务定位器在构造函数中为null

时间:2014-07-06 09:16:57

标签: php zend-framework2

我正在使用zend框架2.不要在每个动作中重复自己。我为dbAdapter编写了getter / setter。我想在控制器的构造函数中实例化db适配器。 为了创建db适配器的实例,我做

$this->getServiceLocator( ) )->get( 'Zend\Db\Adapter\Adapter' ) )

但是如果我在构造函数中调用它,则servicelocator将为NULL

$this->getServiceLocator( ) )

我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

调用__constuct方法后设置服务定位器。所以$ serviceLocator永远不会在__construct时设置。

在这里阅读更多内容

https://juriansluiman.nl/article/139/zf2-why-a-service-is-not-available-in-your-constructor

您需要为您的服务编写工厂,而不是仅将其配置为可调用的工厂。使用构造函数注入。

class MyService 
{
    protected $myDependency;

    public function __construct(MyDependency $myDependency)
    {
        $this->myDependency = $myDependency;
    }
}

最快的方法是在appropraite module.php文件中

    public function getServiceConfig()
{
    return [
        'factories' => [
            'myService' => function($serviceManager) {
                return new MyService($serviceManager->get('myDependency'));
            }
        ]
    ];
}