CakePHP 設定情報をYAMLで管理する

notoです。

CakePHPで設定情報を書く場合、Configure::writeをよく使うと思います。 しかし設定情報を書き変えたい場合、コードを書き変える必要があります。(コードに直書きしている場合)

YAMLに設定情報を定義することで、コードを書き換える必要がなく幸せになれるねって話です。

検証環境

  • CakePHP2.0.4
  • PHP5.3.8

設定ファイル(YAML)を作成する

app/Config以下にsetting.ymlを作成します。

YAMLの書き方はプログラマーのための YAML 入門 (初級編)が参考になると思います。

Spycを配置する

PHPでYAMLを扱うためのクラスであるSpycをダウンロードします。

app/Vendor/以下にspycフォルダを作成し、spyc.phpを配置します。

ディレクトリ構造

1
2
3
4
app
 |__Vendor
    |__spyc
       |__spyc.php

設定ファイル(setting.yml)を元にConfigure::writeを行う

これでYAMLをパースする準備ができたので、Configure::writeを行う処理を実装します。

app/Config/bootstrap.php
1
2
3
4
5
6
7
8
9
10
<?php

App::import('Vendor', 'Spyc/Spyc');
if(file_exists(dirname(__FILE__) . DS . 'setting.yml')){
    $setting = Spyc::YAMLLoad(dirname(__FILE__) . DS . 'setting.yml');

    foreach ($setting as $key => $value) {
        Configure::write($key, $value);
    }
}

これで、setting.ymlに定義された情報がConfigure::readで取得できます。

この一連の処理はオープンソースのcroogoをかなり参考にしています。 croogoでは、データベースで管理されたデータをYAMLファイルとして出力して、それを読み込んでいます。

オープンソースは色々勉強になりますね。

Comments