2012-09-28 125 views
1

該文檔提到了通過將MasterSlaveFeature與從適配器一起作爲MasterSlaveFeature的參數傳遞給TableGateway構造函數來執行主 - 從屬性的能力。我的問題是如何在實例化TableGateway對象時訪問該從適配器。Zend Framework 2 Zend_DB MasterSlaveFeature

根據快速入門,我將主站設置在主全局和本地配置文件中。我將如何去配置從設備適配器,以及如何設置多個從設備?

有沒有一個如何做到這一點的工作示例?

更新:我已經取得了一些進展。在全局配置文件中,我添加了另一個名爲slave的數組鍵,並在那裏輸入連接信息。然後我創建了一個模擬Zend \ Db \ Adapter \ AdapterServiceFactory的行爲的SlaveAdapterServiceFactory類,但抓取了「slave」配置鍵值而不是「db」。然後,在我的模塊配置中,我執行主適配器的構造函數注入,我也獲取從適配器並將它作爲構造函數參數傳遞給我的模型表,以作爲新的MasterSlaveFeature實例。我還必須改變我的模型表類,以查找構造函數中傳遞的特性。由於模式表類擴展了AbstractTableGateway,我希望它知道如何處理該特徵。希望這個假設是正確的。這一切聽起來很混亂!這是一些代碼。首先從配置/自動載入目錄中的global.php:

return array(
    'db' => array(
     'driver'   => 'Pdo', 
     'dsn'   => 'mysql:dbname=zf2test;host=one.host.com', 
     'driver_options' => array(
      PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' 
     ), 
    ), 
    'slave' => array(
     'driver'   => 'Pdo', 
     'dsn'   => 'mysql:dbname=zf2test;host=two.host.com', 
     'driver_options' => array(
      PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' 
     ), 
    ), 
    'service_manager' => array(
     'factories' => array(
      'Zend\Db\Adapter\Adapter' 
       => 'Zend\Db\Adapter\AdapterServiceFactory', 
      'My\Db\Adapter\SlaveAdapter' 
       => 'My\Db\Adapter\SlaveAdapterServiceFactory' 
     ), 
    )  
); 

下面是從模塊的module.config.php文件中的代碼:

return array(
    'service_manager' => array(
     'factories' => array(
      'Album\Model\AlbumTable' => function($sm) { 
       $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); 
       $slaveAdapter = $sm->get('My\Db\Adapter\SlaveAdapter'); 
       $table = new AlbumTable($dbAdapter, new MasterSlaveFeature($slaveAdapter)); 
       return $table; 
      } 
     ) 
    ) 
); 

我還沒有機會來測試查詢實際上會進行正確的連接,但我沒有收到任何錯誤。

另外一個問題是如何自動將這些適配器傳遞給任何創建的模型,而不必爲每個實例化的模型都執行此操作。

回答

0

這應該幫助你:MasterSlaveFeature How-To

但是對這個區域ZF2目前開發商說話有確實出現了一個錯誤。我已經根據他的建議提交了一份報告,因此一旦解決問題,我已經展示的示例應該可以工作,並結合您擁有的內容=)