2

我正在創建管理數據庫實體的抽象模型 - 我已經有EntityAbstract,EntitySetAbstractManagerAbstract模型。在我的ManagerAbstract模型中,我需要一個Zend/Db/Adapter實例來創建一個Zend\Db\TableGateway如何從模型中獲取Zend Db Adapter實例? (ZF2)

我該如何將適配器的主要實例拉到我的ManagerAbstract?在ZF1中,我可以用Zend_Registry來實現這一點。

如果這不是在ZF2中做事的正確方法,我很樂意聽到這種事情的正確方法。

謝謝!

回答

7

使用依賴注入容器Zend\DiZfcUser項目可以解決這個問題,如果你想在一些工作代碼中尋找答案的話。

另外,基本的方法是這樣的(未測試的代碼!):

首先:配置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放入要使用它的控制器(或其他服務)中。

+0

哇,謝謝你的驚人答案!儘管如此,我仍然有一個我無法解決的問題。 '缺少Zend \ Db \ Adapter \ Adapter :: __構造參數驅動程序的實例/對象 - 可能是什麼問題? – 2012-04-21 22:01:55

+0

這意味着DI配置在某個地方是錯誤的。可能在Zend \ Db \ Adapter \ Adapter的定義中 – 2012-04-22 17:26:37

相關問題