MVC(Model View Controller)の「V」にあたるビューを作成します。
ビューは、表示・入出力を受け持ちます。
参考:「MVCモデルとは何ですか・・・」など
ビューの規約は次のようになっています。
ビューは、「/app/views/コントローラー名/」に作成します。
ここでは、forumsコントローラーのindexメソッドに対応するよう次のようにビューを作成します。
/app/views/forums/index.thtml
前回までで作成したカテゴリーを表示するようindex.thtmlを次のように作成します。
<?php foreach ($categories as $category) { ?>
<ul>
<li><?php echo h($category['Category']['id']) ?></li>
<li><?php echo h($category['Category']['name']) ?></li>
<li><?php echo h($category['Category']['description']) ?></li>
</ul>
<?php } ?>
コントローラーのindexアクションから渡される値を順に表示しています。
# コントローラのindexメソッド
$this->set('categories',$this->Category->findAll());
echoにつづく「h」は、htmlspecialcharsを省略した関数です。
CakePHPのビューは、そのままphpのコードを記述するようです。
htmlspecialcharsは、HTMLにおいて特殊な意味を持つ文字を表示するために変換を行ってくれる関数です。 例えば、&を&に変換します。
このhtmlspecialcharsをCakePHPでは、次のように定義しています。(cake/basics.php)
function h($text) {
if (is_array($text)) {
return array_map('h', $text);
}
return htmlspecialchars($text);
}
上記関数を通すことで、配列でもhtmlspecialchars関数を実行した事と同じになります。
CakePHP.orgの方でも修正されているようですが、htmlspecialcharsを使用する場合 ENT_QUOTESを引数に指定しないとセキュリティ上問題があります。
CakePHPのサイトで確認したところ、次のように修正されるようです。
function h($text, $charset = null) {
if (is_array($text)) {
return array_map('h', $text);
}
if (empty($charset)) {
$charset = Configre::read('App.encoding');
}
if (empty($charset)) {
$charset = 'UTF-8';
}
return htmlspecialchars($text, ENT_QUOTES, charset);
}
Copyright 1997-2008 BBB All rights reserved.