CRUDの基本について (4/9)
作成:2015-09-19 11:11
更新:2015-09-19 11:11
更新:2015-09-19 11:11
■エンティティ一覧のテンプレート
では、エンティティ一覧表示のテンプレートを用意しましょう。「Template」フォルダ内の「Persons」内に「index.ctp」というファイルを作成し、下のリスト欄のように記述をして下さい。
コントローラー側では、personsという名前でfind('all')した結果を保管していました。テンプレートでは、このpersonsから順にエンティティの値を取り出し、そこから各フィールドの値を取り出して表示していく処理をすればいいわけですね。
それを行っているのがこの部分です。
foreachを使い、$personsから順に値を取り出しては変数$personにおさめていきます。繰り返しの中では、<?= $person->id ?>というようにしてエンティティのプロパティを取り出して出力しています。
ところで、エンティティのプロパティを出力している部分をよく見ると、h($person->id)というように、hという関数のようなものの引数としてエンティティのプロパティを記述していることがわかります。これ、単に<?= $person->id ?>ではダメなんでしょうか?
もちろん、ダメではありません。が、このhにはちゃんと意味があるんです。
このhという関数は、PHPの「htmlspecialchars」関数の短縮形なのです。PHP内から出力を行うとき、HTML関連のタグなどをhtmlspecialcharsでエスケープするという手法はご存知でしょう。これ、確かにやったほうがいいのはわかるけど、htmlspecialcharsって長すぎるんですよね。
そこでCakePHPには、短縮形のh関数を用意した、というわけです。h(○○)と書けば、○○をエスケープ処理して出力します。これは合わせて覚えておきましょう。
コントローラー側では、personsという名前でfind('all')した結果を保管していました。テンプレートでは、このpersonsから順にエンティティの値を取り出し、そこから各フィールドの値を取り出して表示していく処理をすればいいわけですね。
それを行っているのがこの部分です。
<?php foreach ($persons as $person): ?>
<tr>
<td><?= h($person->id) ?></td>
<td><?= h($person->name) ?></td>
<td><?= h($person->age) ?></td>
<td><?= h($person->mail) ?></td>
</tr>
<?php endforeach; ?>
foreachを使い、$personsから順に値を取り出しては変数$personにおさめていきます。繰り返しの中では、<?= $person->id ?>というようにしてエンティティのプロパティを取り出して出力しています。
■h(○○)ってなに?
ところで、エンティティのプロパティを出力している部分をよく見ると、h($person->id)というように、hという関数のようなものの引数としてエンティティのプロパティを記述していることがわかります。これ、単に<?= $person->id ?>ではダメなんでしょうか?
もちろん、ダメではありません。が、このhにはちゃんと意味があるんです。
このhという関数は、PHPの「htmlspecialchars」関数の短縮形なのです。PHP内から出力を行うとき、HTML関連のタグなどをhtmlspecialcharsでエスケープするという手法はご存知でしょう。これ、確かにやったほうがいいのはわかるけど、htmlspecialcharsって長すぎるんですよね。
そこでCakePHPには、短縮形のh関数を用意した、というわけです。h(○○)と書けば、○○をエスケープ処理して出力します。これは合わせて覚えておきましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<div> <h3>List Persons</h3> <table> <thead> <tr> <th>ID</th> <th>NAME</th> <th>AGE</th> <th>MAIL</th> </tr> </thead> <tbody> <?php foreach ($persons as $person): ?> <tr> <td><?= $person->id ?></td> <td><?= h($person->name) ?></td> <td><?= h($person->age) ?></td> <td><?= h($person->mail) ?></td> </tr> <?php endforeach; ?> </tbody> </table> </div>
※関連コンテンツ
「初心者のためのCakePHP3 プログラミング入門」に戻る