Zend framework 更改zend framework中application.ini参数的值

Zend framework 更改zend framework中application.ini参数的值,zend-framework,Zend Framework,我正在研究Zend框架,并使用基于模块的多数据库结构 我通过application.ini中的multidb方法使用多个数据库 我的应用程序.ini看起来像 resources.multidb.primary.adapter = PDO_MYSQL resources.multidb.primary.host = localhost resources.multidb.primary.username = root resources.multidb.primary.password = 123

我正在研究Zend框架,并使用基于模块的多数据库结构

我通过application.ini中的multidb方法使用多个数据库

我的应用程序.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值,以便为不同的模块使用不同的数据库

我尝试使用中提到的代码

代码片段如下所示:-

$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;
但它不起作用


请帮助我。

您不能动态更改application.ini中的参数,因为引导在路由/分派之前发生。配置在引导过程中加载,如果您想根据所选路由更改参数,您已经在路由之后了

第一选项

有几种选择。一个frontController插件,在完成路由(routeShutdown或更高版本)后更改默认数据库适配器。在插件中,您可以执行以下操作:

$db = Zend_Controller_Front::getInstance()
                           ->getParam('bootstrap')
                           ->getResource('multidb')
                           ->getDb('secondary')
Zend_Db_Table::setDefaultAdapter($db);
dbName(在本例中为“secondary”)的选择取决于您的路由(以及模块/控制器/操作)

第二选项

第二,还有另一种选择。您需要使用高级模块应用程序资源,该资源能够处理每个模块的模块配置。有两个人建议使用这样的资源插件:和

为一个模块在application/modules/mymodule/configs/module.ini中放置一个文件

resources.multidb.primary.default = true
resources.multidb.secondary.default = true
在另一个模块中,例如应用程序/模块/anothermodule/configs/module.ini

resources.multidb.primary.default = true
resources.multidb.secondary.default = true

这与第一个选项的结果相同。

我认为此代码段不会修改发送到DB适配器的数据。你在引导中使用它?也许可以使用Zend_Db::factory()将您的数据连接设置从.ini设置到bootstrap。Thx Jurian--------我按照您的建议选择了第一个解决方案,它实现了神奇的效果--------再次使用Thx:--)