我创建用于管理数据库实体的抽象模型-我已经有EntityAbstract
, EntitySetAbstract
和ManagerAbstract
车型。 在我ManagerAbstract模型我需要Zend/Db/Adapter
,以便创建一个实例Zend\Db\TableGateway
。
我怎么能拉适配器的主要实例来我ManagerAbstract
? 在ZF1我可以用合适的词汇来实现这一点。
如果这不是在ZF2做事的正确方法,我很想听到正确的方法来这样的事情。
谢谢!
使用依赖注入容器, Zend\Di
。 该ZfcUser如果你想戳一些工作代码围绕项目做到这一点。
另外,基本的方法是这样的(未测试的代码!):
首先:配置DI注入数据库连接信息:
配置/自动加载/ local.config.php:
<?php
return array(
'di' => array(
'instance' => array(
'Zend\Db\Adapter\Adapter' => array(
'parameters' => array(
'driver' => 'Zend\Db\Adapter\Driver\Pdo\Pdo',
),
),
'Zend\Db\Adapter\Driver\Pdo\Pdo' => array(
'parameters' => array(
'connection' => 'Zend\Db\Adapter\Driver\Pdo\Connection',
),
),
'Zend\Db\Adapter\Driver\Pdo\Connection' => array(
'parameters' => array(
'connectionInfo' => array(
'dsn' => "mysql:dbname=mydatabasename;host=localhost",
'username' => 'myusername',
'password' => 'mypassword',
'driver_options' => array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''),
),
),
),
),
),
);
其次,你的模块的内module.config.php
文件,注入适配器插入映射:
模块/我的/配置/ module.config.php:
<?php
return array(
'di' => array(
// some config info...
'My\Model\ManagerAbstract' => array(
'parameters' => array(
'adapter' => 'Zend\Db\Adapter\Adapter',
),
),
// more config info...
)
);
最后,确保你的ManagerAbstract类可以完成注:
模块/我的/ src目录/我的/型号/ ManagerAbstract.php:
<?php
namespace My\Model;
use Zend\Db\Adapter\Adapter;
use Zend\Db\Adapter\AdapterAwareInterface;
abstract class ManagerAbstract implements AdapterAwareInterface
{
/**
* @var Zend\Db\Adapter\Adapter
*/
protected $adapter;
// some code
public function setDbAdapter(Adapter $adapter)
{
$this->adapter = $adapter;
}
// some more code
}
请注意,使用任何的子类,你需要通过DIC进行检索或注入映射到该服务,然后注入到服务要使用它的控制器(或其他服务)。