CakePHP compact使おうぜ
notoです。
あけましておめでとうございます。新春早々CakePHPネタです。
CakePHPで、ControllerからViewへデータを渡す際にsetメソッドを利用しますね。 そこでPHPのcompactという関数を使うともっと楽になるよってお話です。
動作環境
- CakePHP 1.3 〜 2.0.4
- PHP 5.3.8
- CentOS 5.6
CakePHP始めたばかりの方は、データをViewに渡す際、恐らくこのように書くと思います。
1 2 3 4 5 6 7 |
|
これでview側で$barを出力すると「これはbarです。」と表示されますね。 この書き方でも、間違いではありませんが、viewへ渡すデータが増えた場合はどうでしょうか。
1 2 3 4 5 6 7 8 9 10 11 |
|
setメソッドが何度も呼ばれていますね。正直これはカッコよくないです。 じゃあカッコよく書く為にはどうするかというとcompact関数を使用します。上のコードをcompact関数を使用して書きなおしてみます。
1 2 3 4 5 6 7 8 |
|
setメソッドは一度呼ぶだけで済みます。compactで書く時と書かない時はどう違うの?って思う方もいると思うので、compact関数と、Controllerのsetメソッドはどういう処理をしているのか見ていきます。
1 2 3 4 5 6 7 8 |
|
実行結果
1 2 3 4 5 6 |
|
変数名をキーとして連想配列化されています。extract関数の逆の処理を行なっているわけです。次にCakePHPのコアな部分Controllerクラスのsetメソッドを覗いてみます。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
$this->set('bar', $bar);
とした場合、どういう処理が行われているかというと、9行目が該当箇所になります。barをキー、変数$barをバリューとして配列を作成しています。それを$this->viewVars
というグローバル変数に代入しています。
2回目にsetが呼ばれた場合、11行目にある通り、配列演算子で結合されています。連想配列化してますね。 つまりsetメソッドの中でやっていることは、compact関数と対して変わらないということです。
ちょっとしたことですが、僕はCakePHPではcompact関数はよく使ってます。他ではあまり使わないですが。。。