在zend框架中更改application.ini参数的值

时间:2010-12-22 11:11:54

标签: zend-framework

我正在研究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;

但它没有用。

请帮帮我。

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 KeppensMatthijs van den Bos

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

resources.multidb.primary.default = true

在另一个模块中,例如应用/模块/ anothermodule / CONFIGS / module.ini中

resources.multidb.secondary.default = true

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