【ZendFramework】Zend_Configは便利。

Apacheのアクセスログが置かれているディレクトリの絶対パスや、ルートディレクトリ、webapp等の絶対パス

  1. 各クラス、モジュールで共通に使う
  2. ハードウェアの環境によって変化する可能性がある

…ものなので、一箇所にまとめてカプセル化して管理しておくと便利です。
これを可能にするのが
Zend_Config
です(・∀・)


設定ファイルとして指定可能なのは

  1. Iniファイル
  2. XMLファイル

の二種類なのですが、Iniファイルのほうが処理が速いそうです(可読性も良いし…)。
Iniファイルの例としては、

[global]
id = Choo
domain_name = Choo.com
root_path = /home/Choo/release/html/
webapp_path = /home/Choo/release/webapp/


[db]
db_postgres = Pdo_Pgsql
db_host = 127.0.0.1
db_user = Choo
db_pass = ChooChoo
db_name = Choo

となっています。

$config = new Zend_Config_Ini('/path/to/config.ini', 'global');

とすると、「global」セクションのみを読みに行きますが、

$config = new Zend_Config_Ini('/path/to/config.ini', null);

とすると、全てのセクションを読みに行きます。


Iniファイルの情報を引っ張り出したい(例えば「webapp_path」が欲しい)時には、

$path_to_webapp = $config->global->webapp_path;

とすることで、「$path_to_webapp」に「webapp_path」が格納されます。


ModelでDBアクセスの処理を書くようにしているのですが、
親Modelを作っておいてそこにDBアクセス情報を記述しておき、
Modelを新規で作りたい時には、その親Modelを継承するように
しておくことで、DBへのアクセスが楽になります。

2009-05-08追記

設定項目取得に関して補足です。
1セクション中の全ての項目を取得したい場合は、セクション名までを指定することで
そのセクションの持つ全ての項目が配列で渡されます。
上記の「db」を例に取ると…

$arrayDbInfo = $this->_config->db->toArray();

とすれば、$arrayDbInfoの中に「db_postgres」「db_host」などの情報が

$arrayDbInfo["db_postgres"] = "Pdo_Pgsql";
$arrayDbInfo["db_host"] = "127.0.0.1";

のように格納されます。