2012-09-28 124 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目前开发商说话有确实出现了一个错误。我已经根据他的建议提交了一份报告,因此一旦解决问题,我已经展示的示例应该可以工作,并结合您拥有的内容=)