我正在使用zend框架2.不要在每个动作中重复自己。我为dbAdapter编写了getter / setter。我想在控制器的构造函数中实例化db适配器。 为了创建db适配器的实例,我做
$this->getServiceLocator( ) )->get( 'Zend\Db\Adapter\Adapter' ) )
但是如果我在构造函数中调用它,则servicelocator将为NULL
$this->getServiceLocator( ) )
我怎么能这样做?
答案 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'));
}
]
];
}