我正在研究Zend Framework并使用基于模块的结构和多个数据库。
我在 application.ini
中通过multidb方法使用多个数据库我的 application.ini 看起来像
resources.multidb.primary.adapter = PDO_MYSQL
resources.multidb.primary.host = localhost
resources.multidb.primary.username = root
resources.multidb.primary.password = 123456
resources.multidb.primary.dbname = tubaah_zend
resources.multidb.primary.default = true
resources.multidb.secondary.adapter = PDO_MYSQL
resources.multidb.secondary.host = localhost
resources.multidb.secondary.username = root
resources.multidb.secondary.password = 123456
resources.multidb.secondary.dbname = tubaah
我想在飞行中设置multidb.primary.default和multidb.secondary.default值,以便我可以为不同的模块使用不同的数据库。
我尝试使用http://framework.zend.com/manual/en/zend.config.theory_of_operation.html中提到的代码。
代码段如下: -
$config = new Zend_Config_Ini(APPLICATION_PATH. '/configs/application.ini', 'development', array('allowModifications' => true));
$config->resources->multidb->primary->default = 0;
$config->resources->multidb->secondary->default = 1;
但它没有用。
请帮帮我。
答案 0 :(得分:0)
您无法动态更改application.ini中的参数,因为在路由/分派之前会发生自举。配置在引导期间加载,如果您想根据所选路由更改参数,则您已经在路由之后。
第一个选项
有几种选择。一个frontController插件,它在路由完成后改变默认数据库适配器(routeShutdown或更高版本)。在插件中,您可以执行以下操作:
$db = Zend_Controller_Front::getInstance()
->getParam('bootstrap')
->getResource('multidb')
->getDb('secondary')
Zend_Db_Table::setDefaultAdapter($db);
dbName的选择(在本例中为“secondary”)取决于您的路由(以及模块/控制器/操作)。
第二个选项
其次还有另一种选择。您需要使用能够处理每个模块的模块配置的高级模块应用程序资源。有两个人建议使用此类资源插件:Jeroen Keppens和Matthijs van den Bos
您在application / modules / mymodule / configs / module.ini中为一个模块放置一个文件
resources.multidb.primary.default = true
在另一个模块中,例如应用/模块/ anothermodule / CONFIGS / module.ini中
resources.multidb.secondary.default = true
这与第一个选项的结果相同。