Resource コンポーネント

Lambda/components/Resource.php

lmd では、WEBアプリケーションで利用する「区分ID」や「属性値」など、何らかの値一覧を持つ、小規模なマスター系データを配列で定義すること推奨しています。
そして、配列定義を *資源* と位置づけ、Lambda/resources ディレクトリ内で一元管理します。
一元管理することは、定義があちらこちらに分散しないようにするための対策であり、DRYの一環です。
Resource コンポーネントは、これらの資源を呼び出すことに特化したコンポーネントです。

[note]
これらの資源を yml や xml で定義することを非推奨としています。
yml や xml の独自フォーマットは、利用時にパースを必要とするため、多少なりともパフォーマンスに影響します。
また、データベースのテーブルで定義するのも筋の悪い手法だと考えます。
※ ただし、動的に値を修正変更する必要がある場合はこの限りではありません。

 

では、詳しい使い方を説明していきます。

まずは資源となる配列定義のコード例です。
実体は、配列を return しているだけの php スクリプトです。

Lambda/resources/rsc.php

<?php

return array(
    'jp' => '日本',
    'us' => 'アメリカ',
    'uk' => 'イギリス',
    'japan' => array('tokyo' => '東京', 'kanagawa' => '神奈川', 'chiba' => '千葉');
    'tokyo' => array('chiyoda' => '<千代田区>', 'minato' => '<港区>');
);

通常、このようなデータの持ち方はしませんが、サンプルなので。

 

Resource::setBaseDir メソッドで、配列を探索するディレクトリを指定します。

Resource::setBaseDir('/Lambda/resources');

※ このメソッドを呼ばない場合、暗黙のうちに Resource.php が置かれているディレクトリが設定されます。

lmd では、Lambda.init.php 内で、Resource::setBaseDir メソッドを呼んでいます。
 

これ以降、配列を探索するディレクトリに「/Lambda/resources」が指定されたものとして説明していきます。

 

/Lambda/resources/rsc.php の値を取得する

$rsc = Resource::get('rsc'); // 拡張子 .php は不要
array(
    'jp' => '日本',
    'us' => 'アメリカ',
    'uk' => 'イギリス',
    'japan' => array('tokyo' => '東京', 'kanagawa' => '神奈川', 'chiba' => '千葉');
    'tokyo' => array('chiyoda' => '<千代田区>', 'minato' => '<港区>');
);
 

/Lambda/resources/rsc.php の キー ['us'] の値を取得する

$rsc = Resource::get('rsc', 'us');
アメリカ
 

/Lambda/resources/rsc.php の キー ['japan']['chiba'] の値を取得する

$rsc = Resource::get('rsc', array('japan', 'chiba'));
千葉
 

存在しないキーを指定すると、空配列 array() が返却されます

$rsc = Resource::get('rsc', 'x_key');
array()
 

第三引数は、与えられたキーが存在しない場合の代替値を指定します。

$rsc = Resource::get('rsc', 'x_key', NULL);
NULL
 

デフォルトでは、値をサニタイズして返却します

$rsc = Resource::get('rsc', array('tokyo', 'chiyoda'));
&lt;千代田区&gt;
 

第四引数に Resource::INSANITATION を指定して、値をサニタイズしないで返却する

$rsc = Resource::get('rsc', array('tokyo', 'chiyoda'), NULL, Resource::INSANITATION);
<千代田区>
 

指定可能なキーの深さは 5階層 まで。

// 動作します
$rsc = Resource::get('rsc', 'key1');
$rsc = Resource::get('rsc', array('key1', 'key2'));
$rsc = Resource::get('rsc', array('key1', 'key2', 'key3'));
$rsc = Resource::get('rsc', array('key1', 'key2', 'key3', 'key4'));
$rsc = Resource::get('rsc', array('key1', 'key2', 'key3', 'key4', 'key5'));

// 動作しません
$rsc = Resource::get('rsc', array('key1', 'key2', 'key3', 'key4', 'key5', 'key6'));
 

説明

Resource::get(string filename [, mixed keys, mixed fallback, bool sanitize]);