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();
}
}