Zend_Application を使う(3)

Zend_Application での設定ファイルの読み込み方法が id:noopable さんの所で紹介されている。

クラスリソースで追加読み込みする

Bootstrapクラス内で_initConfig()みたいなメソッドを定義しておくことで、自由に追加のオプションをロードできると思います。そういう方法もあり。

Zend_Application (5) 実戦的使い方 - noopな日々

自分が取ったのはこの方法。
設定ファイルを読み込むラッパークラスを作ったので、設定ファイルは全てそこ経由で読み込むという仕様にしている。
アプリケーション全体で使用するような設定値はブートストラップで一括して読む方が良いと思うけど、個々の処理の中で設定ファイルを限定的に読みたいという事があるのでクラスを作った。

<?php
// Zend_Config オブジェクトが返ってくる
$config = Gene_Config::load('/path/to/file', $this->_cache);

ただ、ファイルを分けすぎるとディスクIOあたりに影響がでないかどうか微妙なので、私は設定を読み込んだらまとめてキャッシュしておきます。

Zend_Application (5) 実戦的使い方 - noopな日々

全く持ってその通りなので、Zend_Cache_Frontend_File のキャッシュオブジェクトを渡して、キャッシュがあればそこから読み込み、無かったら Zend_Config から読むようにしている。


Zend_Cache_Frontend はいつからか設定オプションの master_file が非推奨になっていて、master_files という複数のファイルを設定するように仕様変更された。
ブートストラップで使うような設定ファイルは一括で読み込みキャッシュファイルを作った方が良いのでこの仕様変更はありがたい。
設定ファイル類は一つのディレクトリに入れるという規約にすれば良い。

<?php
protected function _initCache()
{
    $instance = Gene_Cache_File::getInstance($this->_appPath);
    $frontend = array(
        'master_files' => $instance->directorySearch()
    );
    $this->_cache = $instance->setFrontend($frontend)->getCache('config');

    return $this;
}

こんな感じにブートストラップの最初に _initCache() というメソッドを作り、その中で設定ファイルを設置しているパスを設定する。
directorySearch() が設定ファイルがあるパスを再帰的に検索し、拡張子が設定ファイルとおぼしき物を取得する。
# 今は拡張子が ini と xmlyaml がデフォルトの読み込み対象としている