Curry
PHP Framework

設定ファイル

iniファイル

プログラム中で利用する設定値を別ファイル化するのは有効な手段です。設定ファイルの一般的なフォーマットはXML、YAML、INIなどいくつかありますが、Curryフレームワークで標準的にINIを利用します。

Iniクラス

INIファイルを手軽に利用するにはまず、ファイルをconfigsディレクトリ内に配置します。

∟configs/
    ∟ system.ini
configs/system.ini
[length]
password_min = 6
password_max = 16

[lists]
age[] = "10代"
age[] = "20代"
age[] = "30代以上"
country[] = "日本"
country[] = "日本以外"

配置したら、Iniクラスの静的メソッドであるloadメソッドを実行するだけです。

$iniArray = Ini::load('system.ini');
var_dump($iniArray);
array(2) {
  ["length"]=>
  array(2) {
    ["password_min"]=>
    string(1) "6"
    ["password_max"]=>
    string(2) "16"
  }
  ["lists"]=>
  array(2) {
    ["age"]=>
    array(3) {
      [0]=>
      string(5) "10代"
      [1]=>
      string(5) "20代"
      [2]=>
      string(11) "30代以上"
    }
    ["country"]=>
    array(2) {
      [0]=>
      string(6) "日本"
      [1]=>
      string(12) "日本以外"
    }
  }
}

このようにiniファイルの内容が配列で得られます。
また、第二引数にセクション名を指定することで、特定セクションの設定値のみ取得することも可能です。

$iniArray = Ini::load('system.ini', 'length');
var_dump($iniArray);
array(2) {
  ["password_min"]=>
  string(1) "6"
  ["password_max"]=>
  string(2) "16"
}

キーの階層化

Curryでは、iniファイル内の設定キーを階層化することが出来ます。
それには、"第一階層キー.第二階層キー"という具合に、キー指定にドット(.)を含めます。
これを利用すると、上記の設定例は以下のように書き換えることができ、結果は同じになります。

configs/system.ini
[setting]
length.password_min = 6
length.password_max = 16
lists.age[] = "10代"
lists.age[] = "20代"
lists.age[] = "30代以上"
lists.country[] = "日本"
lists.country[] = "日本以外"
$iniArray = Ini::load('system.ini', 'setting');
var_dump($iniArray);

オブジェクトアクセス

Ini::loadメソッドによって得られる情報は配列ですが、キーへのオブジェクトアクセスも可能になっています。
例えば上記の例で得られる情報は、値の取得に以下の2通りの方法があります。

配列として値取得
$ini = Ini::load('system.ini', 'setting');
var_dump($ini['list']['age']);
オブジェクトとして値取得
$ini = Ini::load('system.ini', 'setting');
var_dump($ini->list->age);

この二通りのパターンは同じ結果です。

実際はIni::loadによって得られるのは配列ではなく、ArrayObjectのインスタンスです。
そのためオブジェクトアクセスが可能ですが、逆にこれが邪魔な場合もあるでしょう。
たとえばArrayObjectにはis_arrayなどの配列関数が利用できないという問題があります。
このような場合のため、Ini::loadの戻り値を純粋な配列とすることも可能になっています。
それには以下のメソッドを事前に実行するだけです。

Ini::isReturnObject(false);

Curryで標準的に利用されるiniファイル

Curryの規定のiniファイルがいくつか存在します。これらはconfigsディレクトリに配置するだけで有効になるもので、Curryで予約的に利用されるものです。別の用途としてユーザーがこれらと同名のiniファイルを利用することは基本的にはできません。

database.ini

Curryでデータベースを利用する際に、その接続情報を設定するiniファイルです。詳しくは導入の章を参照してください。

routing.ini

Curryでmod_rewriteを利用する場合、URLの形式は決まっています。すなわち、

http://www.xxxx.com/(コントローラー)/(アクション)/(パラメーター1)/(パラメーター2)/・・・

という形式です。
通常、URLの中の各セグメントの位置は固定ですが、routing.iniによってこれを変更することが出来ます。また、パラメーターに任意のキーを設定することも可能です。詳しくはコントローラーの章を参照してください。

curry.ini

Curryの動作に関わるあらゆる初期設定を行うiniファイルです。
このファイルによる設定の反映はDispatcher::dispatchの頭のタイミングで行われます。
そのため、index.phpで個別に設定メソッドで設定を行なっても、それを上書きするようにcurry.iniでの設定が反映されます。
コントローラーやプラグインのpreProcessで個別の設定メソッドを実行した場合はそちらが有効になります。

curry.iniでの設定項目はカスタマイズを参照してください。