CakePHP

CakePHP Stringクラスのinsert()を使ってみる

CakePHPのStringクラスにある「insert()」を試してみました。
自分のメモでもありますが。。。

特に便利と感じた利用方法。。。

皆さんは「__(‘CakePHP best’)」などような言語ファイルを使った国際化を自動で行ってくれる機能を、をすでに使っているかと思います。
例えばこの「CakePHP best」の部分を動的に変えたいと思う場合もあるかと思います。

簡単にコーディングを行おうと思えば次のようなるかと思います。

$value='best';
echo __('CakePHP ',true).$value;

と言った形で「$value」の値を変更していくと言った形でしょうか。。。
もちろん100%悪い形というわけではありませんが、もし「CakePHP 」を最終的に
「CakePHP is」+「$value」+「PHP」に変更しなければならなくなった場合。。。

もちろん先ほどの状態では次のように変更しなければならなくなります。

$value='best';
echo __('CakePHP ',true).$value.__('PHP',true);

これでは修正がある度に手間がかかり、これがいくつものファイルに存在した場合を考えると。。。
悪夢です(笑)

そこで活躍するのが今回のStringクラスの「insert()」。

先ほどの例を「insert()」に置き変えた場合の答えを先に記述すると次のようになります。

echo String::insert(__('CakePHP :status PHP',true),array('status'=>'best'));
//CakePHP best PHP

さてお気づきでしょうか?

「:status」が「insert()」の第2引数である配列のキーの値を参照し、置き換えてくれます。
こうすることで、言語ファイルには「CakePHP :status PHP」だけを記述し、自由に変更することができます。
もちろん配列のキーは複数指定することもできるので、

echo String::insert(__('CakePHP :status PHP by :foo',true),array('status'=>'best','foo'=>'me'));
//CakePHP best PHP by me

も可能です。
これで無駄に言語ファイルが肥大化することも抑えることかと思います。
英文の文法についてはご了承ください(笑)

コメント

  1. […] CakePHP Stringクラスのinsert()を使ってみる | WIDGET-INFO […]