该文档提到了通过将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;
}
)
)
);
我还没有机会来测试查询实际上会进行正确的连接,但我没有收到任何错误。
另外一个问题是如何自动将这些适配器传递给任何创建的模型,而不必为每个实例化的模型都执行此操作。