Zend framework2 Zend Framework 2 Zend_DB MasterSlaveFeature

Zend framework2 Zend Framework 2 Zend_DB MasterSlaveFeature,zend-framework2,zend-db,tablegateway,Zend Framework2,Zend Db,Tablegateway,文档中提到了通过将MasterSlaveFeature与从属适配器一起作为MasterSlaveFeature的参数传递给TableGateway构造函数来实现主从的能力。我的问题是如何在实例化TableGateway对象时访问该从属适配器 根据快速入门,我正在主要的全局和本地配置文件中设置我的主机。如何配置从属适配器,如何设置多个从属适配器 是否有一个如何做到这一点的工作示例 更新:我在这方面取得了一些进展。在全局配置文件中,我添加了另一个名为slave的数组键,并在其中输入了连接信息。然后,

文档中提到了通过将MasterSlaveFeature与从属适配器一起作为MasterSlaveFeature的参数传递给TableGateway构造函数来实现主从的能力。我的问题是如何在实例化TableGateway对象时访问该从属适配器

根据快速入门,我正在主要的全局和本地配置文件中设置我的主机。如何配置从属适配器,如何设置多个从属适配器

是否有一个如何做到这一点的工作示例

更新:我在这方面取得了一些进展。在全局配置文件中,我添加了另一个名为slave的数组键,并在其中输入了连接信息。然后,我创建了一个SlaveAdapterServiceFactory类,它模仿Zend\Db\Adapter\AdapterServiceFactory的行为,但获取的是从属配置键值,而不是Db。然后,在我的模块配置中,我对主适配器进行构造函数注入,我还获取从适配器,并将其作为构造函数参数传递给新的MasterSlaveFeature实例。我还必须修改我的模型表类,以查找在构造函数中传递的特性。由于模态表类扩展了AbstractTableGateway,我希望它知道如何处理该特性。希望这个假设是正确的。这听起来真让人困惑!下面是一些代码。首先从config/autoload目录中选择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;
            }
        )
    )
);
我还没有机会测试查询是否真的指向正确的连接,但我没有得到任何错误


另一个问题是,如何将这些适配器自动传递给任何已创建的模型,而不必为您实例化的每个模型执行此操作。

这将帮助您:

然而,与当前的开发人员讨论ZF2的这一领域时,确实出现了一个bug。我已经根据他的建议提交了一份报告,所以一旦解决了这个问题,我所展示的例子应该是有效的,再加上你们所拥有的=