該文檔提到了通過將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;
}
)
)
);
我還沒有機會來測試查詢實際上會進行正確的連接,但我沒有收到任何錯誤。
另外一個問題是如何自動將這些適配器傳遞給任何創建的模型,而不必爲每個實例化的模型都執行此操作。