Php Zend framework 2静态适配器

Php Zend framework 2静态适配器,php,zend-framework2,Php,Zend Framework2,如何构造一个静态适配器来调用每个控制器操作 $this->dbAdapter 而不是每次都这么做 like $this->getServiceManager()->get('dbAdapter'); 您可以使用控制器工厂将数据库适配器注入控制器。这将允许您将其作为类属性引用($This->dbAdapter) 通过向模块类添加条目,向控制器插件管理器注册工厂。如果您已经有一个具有注册名称的“invokable”,则需要将其删除 class Module {

如何构造一个静态适配器来调用每个控制器操作

$this->dbAdapter
而不是每次都这么做

like $this->getServiceManager()->get('dbAdapter');

您可以使用控制器工厂将数据库适配器注入控制器。这将允许您将其作为类属性引用(
$This->dbAdapter

通过向模块类添加条目,向控制器插件管理器注册工厂。如果您已经有一个具有注册名称的“invokable”,则需要将其删除

class Module 
{    
    public function getControllerConfig()
    {
        return array(
            'factories' => array(
                'Module\Controller\Foo' => 'Module\Factory\FooControllerFactory'
            ),
        );
    }
}
最后,允许适配器通过其构造函数进入控制器

use Zend\Db\AdapterInterface;

class FooController extends AbstractActionController
{
    protected $dbAdapter;

    public function __construct(AdapterInterface $dbAdapter)
    {
        $this->dbAdapter = $dbAdapter;
    }

    public function indexAction()
    {
        // now you can use the adapter in any action!
        $this->dbAdapter->doStuff();
    }

}

完成所有这些之后,我强烈建议不要使用上述设计(我的意思是注入适配器)。这是因为您将在控制器内执行查询,这是域逻辑与控制器工作流的混合。如果您的域需求发生变化,您的控制器也必须进行更改。

我不是在控制器上进行查询,但是我的同事构建模型类,要求在构造函数中传递db适配器
use Zend\Db\AdapterInterface;

class FooController extends AbstractActionController
{
    protected $dbAdapter;

    public function __construct(AdapterInterface $dbAdapter)
    {
        $this->dbAdapter = $dbAdapter;
    }

    public function indexAction()
    {
        // now you can use the adapter in any action!
        $this->dbAdapter->doStuff();
    }

}