Laravel3、バンドルの設定ファイルの変更

タグ: Laravel3  

バンドルの設定ファイルの変更はどうしていますか?

良くできたバンドルでは、設定を設定ファイルに閉じ込めてくれています。ですから、コードを変更しなくても、バンドルの振る舞いを変更できます。

でも、バンドルのconfigフォルダー下の設定ファイルを直接変更してしまうと、バンドルのバージョンアップで上書きされてしまいます。すると、アップデートコマンドによる変更は出来ず、パッケージを落として、設定ファイルを比較する必要が出てしまいます。

そんな時はイベントを利用しましょう。Laravelの実行準備が整ったイベントを受け取り、その時点でバンドルの設定を置き換えましょう。例えばmelonバンドルがあったとしたら、次のようにします。

Event::listen('laravel.started: melon', function()
{
     Config::set('melon::config.count', '10');
});

もし、変更項目が多くある場合は、別に設定ファイルを作成します。例えば、application/config/bundles/melon.phpに設定項目を通常の設定ファイルのように記述します。

return array(
    'count' => '10',
    'color' => 'red',
    'kind' => 'water',
    'size' => 'big',
);

後は、イベントの中で取り込むだけです。

Event::listen('laravel.started: melon', function()
{
    $config = require_once path('app').'config/bundle/melon.php';
    Config::set('melon::setting', array_merge(Config::get('melon::setting'), $config));
});

これでOKです。

もちろんLaravelの開始イベントは、他のことにも使用できます。ご自由に活用ください。

実は試していませんが、グローバルなbeforeフィルターの中で行なっても同じ結果を得られると思いますが、一応Laravel開発者のTaylorさんがすすめているのがこちらの方法ですので、紹介しました。