使用依賴注入容器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進行檢索或注入映射到該服務,然後注入SERVIC e放入要使用它的控制器(或其他服務)中。
哇,謝謝你的驚人答案!儘管如此,我仍然有一個我無法解決的問題。 '缺少Zend \ Db \ Adapter \ Adapter :: __構造參數驅動程序的實例/對象 - 可能是什麼問題? – 2012-04-21 22:01:55
這意味着DI配置在某個地方是錯誤的。可能在Zend \ Db \ Adapter \ Adapter的定義中 – 2012-04-22 17:26:37