我想在我的应用程序中使用基于模块的application.ini。
有可能吗?
出现基本要求是因为我有多个数据库,具体取决于模块。
请指导。
答案 0 :(得分:1)
在确定模块之前很久就会读取application.ini。我建议你忘掉application.ini,然后尝试编写一个控制器插件,根据选择的模块加载一些额外的配置。
答案 1 :(得分:1)
您可以在application.ini中使用多个Db:
resources.db.master.adapter = "PDO_MYSQL"
resources.db.master.default = false
resources.db.master.params.dbname = "db1"
resources.db.master.params.host = "127.0.0.1"
resources.db.master.params.username = "root"
resources.db.master.params.password = ""
resources.db.slave.adapter = "PDO_MYSQL"
resources.db.slave.default = true
resources.db.slave.params.dbname = "db2"
resources.db.slave.params.host = "127.0.0.1"
resources.db.slave.params.username = "root"
resources.db.slave.params.password = ""
并在你的引导程序中初始化:
public function _initDatabase() {
$config = $this->getApplication()->getOption('resources');
$dbArrays = array();
foreach($config['db'] as $name => $dbConf){
// Set up database
$db = Zend_Db::factory($dbConf['adapter'], $dbConf['params']);
$db->query("SET NAMES 'utf8'");
$dbArrays[$name] = $db;
if((boolean)$dbConf['default']){
Zend_Db_Table::setDefaultAdapter($db);
}
unset($db);
}
Zend_Registry::set("db", $dbArrays);
}
在我的情况下,我总是将每个适配器保存在注册表中,以便稍后单独使用它们。 我还创建了一个新类,它扩展了Zend_Db_table,我有自己的getAdapter($ name),如下所示:
public function getAdapter($name = null){
if($name !== null){
$dbAdapters = Zend_Registry::get('db');
return $dbAdapters[$name];
}
return parent::getAdapter();
}
我可以在每个模型中使用它:
$this->getAdapter('slave')->fecthAll($sql);
$this->getAdapter('master')->fecthAll($sql);