CakePHPにはController、Model、Viewの層があり、それぞれ役割があります。
ControllerはCakePHPの中でも最も基本的な処理を扱い、ViewはControllerなどから受け取った情報を処理してブラウザに表示します。
CakePHPではControllerからViewへデータを渡すには、setメソッドを使用します。
この記事では、
・setメソッドとは?
・setメソッドの基本的な使い方
・配列を管理するsetクラスとは?
という基本的な内容から、
・setメソッドで連想配列を指定する方法
・setメソッドでcompact関数を使用する方法
などの応用的な使い方について解説します。
ここではsetメソッドを使用して、さまざまな形式でViewにデータを渡す方法について、詳しく解説していきます!
setとは
setメソッドとはViewにデータを渡すためのControllerの機能です。
setメソッドを使用して渡された変数は、view内で使用することができます。
setメソッドは以下のように記述します。
$this->set('変数名', $値);
第一引数は、Viewで使用するための変数名を使用し、第二引数には変数名に対応する値を指定します。
CakePHPではControllerからViewにデータを渡すときに使用するsetメソッドは、よく使用する最も基本的な処理となります。
setの基本的な使い方
ここでは、実際にsetメソッドを使用してViewに変数を渡す方法を見ていきましょう。
以下にsetメソッドを使用した簡単なサンプルを紹介します。
cake/src/Controller/SetController.php
<?php namespace App\Controller; use App\Controller\AppController; class SetController extends AppController { public function index() { $item = 'apple'; $this->set('fruits', $item); } } ?>
cake/src/Template/Set/index.ctp
You are about to eat an = h($fruits) ?>
実行結果
You are about to eat an apple
このようにControllerで作成した変数を「$this->set(‘fruits’, $item);」の形式で渡せば、Viewで変数$fruitsの値が参照できることがわかりましたね。
配列を管理するsetクラス
setは、紹介したViewにデータを渡す機能以外に、配列を管理するsetクラスがあります。
setクラスを使用すればさまざまな配列操作が可能ですが、CakePHPのバージョン2.2で廃止され、Hashクラスに置き換わりました。
Hashクラスを使用して、さまざまな配列処理を行う方法については、以下の記事で詳しく解説しています!
連想配列を指定する方法
setメソッドは連想配列を指定することもできます。
配列などのデータの塊をViewに渡す処理は実際によく使用されます。
以下に連想配列をViewに渡して、データを表示する簡単なサンプルを紹介します。
cake/src/Controller/SetController.php
<?php namespace App\Controller; use App\Controller\AppController; class SetController extends AppController { public function index() { //連想配列を作成 $fruits = [ 'apple'=>'100円', 'orange'=>'80円', 'melon'=>'700円', 'banana'=>'100円', 'pineapple'=>'350円' ]; $this->set('fruits', $fruits); } } ?>
cake/src/Template/Set/index.ctp
<table> <tr> <th>ITEM</th> <th>VALUE</th> </tr> <?php foreach ($fruits as $key => $value): ?> <tr> <td><?= $key ?></td> <td><?= $value ?></td> </tr> <?php endforeach; ?> </table>
実行結果
このように配列などのデータの塊もsetメソッドを使用すれば、簡単にViewに渡すことができますね!
compactメソッドを使用する
setメソッドでの便利な記述方法として、compact関数を使用する方法があります。
compact関数とは、変数名とその値から配列を作成する関数です。
compact( $変数名1 [, $変数名2 $... ] )
先程紹介したように、setメソッドは配列にも対応しているため、compact関数を使用することができます。
例えば、従来の方法では以下のように変数名を1つずつsetメソッドに指定する必要があります。
$item1 = 'apple'; $item2 = 'orange'; $item3 = 'melon'; $this->set('item1', $item1); $this->set('item2', $item2); $this->set('item3', $item3);
しかしcompactメソッドを使用すれば、以下のように簡潔に記述することができます。
$item1 = 'apple'; $item2 = 'orange'; $item3 = 'melon'; $this->set(compact('item1', 'item2', 'item3'));
まとめ
ここではsetメソッドを使用して、Viewにデータを渡す基本的な方法から連想配列を渡す方法、compactメソッドを使用して渡す方法などを解説しました。
setメソッドはControllerからViewにデータを渡す処理で、CakePHPでも最も基本的な処理と言えます。
そのため、setメソッドの使い方についてはよく理解しておきましょう。
もしsetメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!