如何在Model中使用getServiceLocator?

时间:2014-09-16 18:36:58

标签: zend-framework2

我正在尝试创建一个连接到DB的模型,但我需要使用适配器。我正在尝试使用$this->getServiceLocator()->get('AdapterDb');,在控制器中工作正常,但在模型中却不行。

1 个答案:

答案 0 :(得分:1)

假设您的模型名称在DBConnect模块中为Auth
因此它位于文件夹路径Auth\Model\DBConnect

Auth模块的Module.php中,您必须定义getServiceConfig个功能。 如果没有,那么先找到。 这是一个注册服务,注入任何依赖项等的函数。

在此处注册您的模型并注入所需的AdapterDb依赖项 -

namespace Auth;

use Auth\Model\DBConnect;

class Module {

    ....
    .....

    public function getServiceConfig() {
        return array(
            'factories' => array(
                .... 
                .....

                'Auth\Model\DBConnect' => function($sm) {
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    $model = new DBConnect();
                    $model->setDbAdapter($dbAdapter);
                    return $model;
                },
            )
        )
    }
}

此处setDbAdapter函数用于设置值,因此模型中应该有一个函数。

在DBConnect模型中 -

namespace Auth\Model;

class DBConnect {

    ...
    ....

    protected $_dbAdapter;

    public function setDbAdapter($dbAdapter) {
        $this->_dbAdapter = $dbAdapter;
    }

    public function getDbAdapter() {
        return $this->_dbAdapter;
    }

    ......
}

现在使用$this->getDbAdapter()获取所需的适配器。

我知道这不是最好的解决方案。它运作得很好。

我希望它有所帮助。