CakePHP : ビューの作成

メモ:  Category:php

MVC(Model View Controller)の「V」にあたるビューを作成します。

ビューは、表示・入出力を受け持ちます。

参考:「MVC モデルとは何ですか・・・」など

CakePHP の規約

ビューの規約は次のようになっています。

  • アクション名(メソッド)とついになるようにビュー(テンプレート)名前をつけるとコントローラーで明示する必要がなくなる。
  • 拡張子は.thtml

ビューの作成

ビューは、「/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 のコードを記述するようです。

実際の表示:

表示イメージ

おまけ(h 関数)

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);
}

bluenote by BBB