我创建了一个服务层AbcService,以允许模块访问公共代码行。但是我需要使用数据库来提取我的AbcService中的值。所以,我需要调用getAbcTable()调用$ service-> getServiceLocator()。当我尝试这个时,我得到一个错误,说“调用未定义的方法getServiceLocator()。
public function getAbcTable()
{
if (!$this->abcTable) {
$sm = $this->getServiceLocator();
$this->abcTable = $sm->get('Abc\Model\AbcTable');
}
return $this->abcTable;
}
答案 0 :(得分:3)
您试图调用一种可能不存在的方法。如果您的服务中需要AbcTable
,则应将其作为依赖项传递。
在Module.php
:
public function getServiceConfig()
{
return array(
'factories' => array(
'AbcService' => function($sm) {
$abcTable = $sm->get('Abc\Model\AbcTable');
$abcService = new AbcService($abcTable);
return $abcService;
},
);
}
并修改服务的构造函数以接受表作为参数:
class AbcService
{
protected $abcTable;
public function __construct($abcTable)
{
$this->abcTable = $abcTable;
}
// etc.
}
然后,无论您需要AbcService
,请将其注入,或从服务定位器中获取它:
public function indexAction()
{
$abcService = $this->getServiceLocator()->get('AbcService');
}
并且服务中将包含表类。