首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

Zend Framework 2 多資料庫配置:啟動時統一實例化適配器

     編輯:C++ 入門

Zend Framework 2 多資料庫配置:啟動時統一實例化適配器

ZF2 預設單資料庫,多資料庫場景需手動管理適配器。本文方案:在 public/index.php 入口文件統一實例化所有資料庫適配器,存入 Zend_Registry,Model 中按需獲取。

核心思路

  1. 讀取 configs/serverConfig.ini 所有資料庫節點。
  2. 遍歷節點,Zend_Db::factory() 創建適配器,存入 $dbAdapters[dbname]。
  3. 若節點配置 default = 1,設為默認適配器 Zend_Db_Table::setDefaultAdapter()。
  4. 將 $dbAdapters 與配置陣列存入 Registry,全局可訪問。

index.php 實現代碼

// 實例化所有資料庫適配器
$configs = new Zend_Config_Ini(APPLICATION_PATH . '/configs/serverConfig.ini');
$dbAdapters = array();
$configArray = array();
$registry = Zend_Registry::getInstance();

foreach ($configs as $config) {
    $databaseName = $config->db->params->dbname;
    $configArray[$databaseName] = $config;
    $registry->set('configArray', $configArray);

    // 配置並實例化資料庫
    $db = Zend_Db::factory($config->db);
    $db->query("SET NAMES utf8");
    $dbAdapters[$databaseName] = $db;

    // 兼容舊版寫法
    $dbAdapters[$databaseName] = Zend_Db::factory(
        $config->db->adapter,
        $config->db->params->toArray()
    );

    if (($config->db->params->default) == 1) {
        Zend_Db_Table::setDefaultAdapter($db);
    }
}
$registry->set('dbAdapters', $dbAdapters);

serverConfig.ini 範例

[proManager]
db.adapter = PDO_MYSQL
db.params.host = 127.0.0.1:3306
db.params.username = root
db.params.password = root
db.params.dbname = proManager
db.params.default = 0

[proManager1]
db.adapter = PDO_MYSQL
db.params.host = 127.0.0.1:3306
db.params.username = root
db.params.password = root
db.params.dbname = proManager1
db.params.default = 1

Model 中使用

class MyModel extends Zend_Db_Table_Abstract {
    protected $_name = 'my_table';
    public function setDb($dbName) {
        $registry = Zend_Registry::getInstance();
        $adapters = $registry->get('dbAdapters');
        $this->_setAdapter($adapters[$dbName]);
    }
}

優勢

  • 單次實例化:請求生命周期內適配器複用,避免重複連接開銷。
  • 集中管理:配置與實例化邏輯集中在入口,Model 保持輕量。
  • 動態切換:通過 setDb() 靈活切換資料庫。

注意事項

  • ZF2 現代寫法推薦使用 ServiceManager + DbAdapter 服務工廠,但本法在遷移舊項目或簡單場景下依然實用。
  • 生產環境應添加連接池、錯誤重試、慢查詢日誌等運維能力。

此方案展示了 ZF2 早期版本中多資料庫管理的實用模式,體現「配置驅動、啟動時綁定、運行時查找」的架構思想。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved