Zend framework2 如何在模型中使用getServiceLocator?

Zend framework2 如何在模型中使用getServiceLocator?,zend-framework2,Zend Framework2,我正在尝试创建一个连接到DB的模型,但我需要使用适配器。我试图使用$this->getServiceLocator()->get('AdapterDb'),在控制器中工作正常,但在模型中工作不正常。假设您的模型名称是Auth模块中的DBConnect。 因此它被放置在文件夹路径Auth\Model\DBConnect中 在Auth模块的module.php中,必须定义getServiceConfig函数。 如果没有,那么先了解一下。 这是一个注册服务、注入任何依赖项等的函数 在此处注册您的模型,

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

假设您的模型名称是
Auth
模块中的
DBConnect

因此它被放置在文件夹路径
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()
获取所需的适配器

我知道这不是最好的解决办法。它很好用


我希望它能帮助一些人。

创建单音-在你需要的任何地方使用(但这可能不是最好的解决方案)我真的希望我能否决上面的评论,请不要创建单音+一个好的答案,并且在他们的问题上比OP投入更多的时间