我想在我的應用程序中使用基於模塊的application.ini。Zend Framework中基於模塊的application.ini
可能嗎?
基本要求出現,因爲我有多個數據庫取決於模塊。
請指導。
我想在我的應用程序中使用基於模塊的application.ini。Zend Framework中基於模塊的application.ini
可能嗎?
基本要求出現,因爲我有多個數據庫取決於模塊。
請指導。
您可以使用的application.ini多個數據庫:
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($名):
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);
在確定模塊之前就會讀取application.ini。我建議你忘記application.ini,而是嘗試編寫一個控制器插件,該控制器插件將根據選擇哪個模塊加載一些額外的配置。