ZF2中的服务层中的getServiceLocator()?

时间:2014-07-02 10:45:52

标签: zend-framework2 service-layer

我创建了一个服务层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;
 }

1 个答案:

答案 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');
}

并且服务中将包含表类。