Zend framework 2的服务定位器在构造函数中为空


Zend framework 2 service locator is null in constructor

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

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

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

$this->getServiceLocator( ) )

我该怎么做呢?

调用__construct方法后设置服务定位器。所以$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;
    }
}

最快的方法是在适当的module.php文件

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