Zend_Dbでiniファイルから複数の接続を管理し簡単に呼び出し  2009年6月12日

 Zend_Dbのfactoryクラスはアダプタやコンフィグ配列を引数にとってデータベースの接続を生成してくれます。

実際のコードで、毎回コンフィグ配列を渡すのも手間なので、INIファイルの設定から接続を生成してregistryに保持して管理してくれるfactoryメソッドを作成してみました。

あらかじめZend_Config_Iniを使ってINIファイルを読み込んでおいて、そのINIの内容を利用するようにします。

INIファイル

 

[database]

; DB接続情報

database.mainDb.type     = pdo_pgsql

database.mainDb.host     = localhost

database.mainDb.username = hoge

database.mainDb.password = hoge

database.mainDb.dbname   = hoge

こんな感じのINIファイルを用意しておきます。「mainDb」のところは複数の接続を管理する際の任意の名前です。
このINIファイルをZend_Config_Iniを使って事前にregistryに保存しておきます。
$appDatabaseConfig = new Ashe_Config_Ini([INIファイル], ‘database’);
Zend_Registry::set( ‘database_config’, $appDatabaseConfig);

Zend_Dbクラス

Zend_Dbクラスを継承したクラスを用意して、factoryクラスをオーバーライドします。
 
class Cshe_Db extends Zend_Db
{
    static public function factory( $registName = ‘mainDb’)
    {
        try {
            Zend_Loader::loadClass( ‘Zend_Registry’ );
            if ( !Zend_Registry::isRegistered( $registName ) ) {
                $appDatabaseConfig = Zend_Registry::get( ‘database_config’);
 
                // DB関連設定取得
                $config = $appDatabaseConfig->toArray();
                $adapterName = $config['database'][$registName]['type'];
                unset( $config['database'][$registName]['type']);
                $db = parent::factory( $adapterName, $config['database'][$registName]);
 
                Zend_Registry::set( $registName, $db);
            } else {
                $db = Zend_Registry::get( $registName);
            }
            return $db;
        }
        catch( Exception $e) {
            throw $e;
        }
    }
}
これで、デフォルトのDb名を「mainDb」としておけばコード内では
 
$db =Cshe_Db::factory();
とするだけで、DBのAdapterクラスを取り出すことができます。
 
 
このエントリをはてなブックマークに登録 このエントリをBuzzurlにブックマーク Yahoo!ブックマークに登録 このエントリをlivedoorクリップに登録 Deliciousにブックマーク

コメントを投稿