cakePHP(v3.x)、Controller側からsetメソッドを使うときはcompact関数が便利。

controllerからある配列を整形して表側(view.ctp)にそれを渡してからrenderをするときに、setメソッドを使うと配列の内容を送信することができます。

例えば以下のような配列をsetした場合、

$shopping_list = array(
    'apple' => 11,
    'banana' => 4,
    'pasta' => 3
);
$this->set('shopping_list',$shopping_list);
$this->render('view');

$this->set(‘変数名’, $値)なので view.ctp側からはshopping_listという名前の連想配列が使えるようになります。

<?php
echo ($shopping_list['apple']); // => 11
echo ($shopping_list['banana']); // => 4
echo ($shopping_list['pasta']); // => 3
?>

ここでPHPの関数の一つであるcompactを使うともう少し簡単に値を送ることができます。 compact関数は文字列を渡すことでその文字列に対応するすでに定義されている関数を配列に変換することができます。 なので今回の場合、controller側を以下のようにすることで同様の処理が実装できます。

$shopping_list = array(
    'apple' => 11,
    'banana' => 4,
    'pasta' => 3
);
$this->set(compact('shopping_list'));
$this->render('view');

これは、複数の配列をview側に送信したいときに文字列を書き加えるだけでいいという利点があります。

$shopping_list = array(
    'apple' => 11,
    'banana' => 4,
    'pasta' => 3
);
$item_price = array(
    'apple' => 110,
    'banana' => 400,
    'pasta' => 300
);
$this->set(compact('shopping_list', 'item_price')); // => view側で$shopping_list配列と$item_price配列が使える。
$this->render('view');