第28章 Zend_View
前のページ |  | 次のページ

## 第28章 Zend_View

## 28.1. 導入

Zend_View は、モデル - ビュー - コントローラ パターンにおける 「ビュー」として働くクラスです。 ビューのスクリプトを、モデルおよびコントローラから分離するために存在します。 このクラスでは、 ヘルパーシステム、出力のフィルタリングおよび変数のエスケープ機能を提供します。

Zend_View は、テンプレートシステムに対しては特にこだわりはありません。 テンプレート言語として PHP を使用するか、 あるいは他のテンプレートエンジンのインスタンスを作成して、 それをビュースクリプトの中で操作することができます。

基本的に、Zend_View を使用する際には 2 つの段階をとることになります。 1. コントローラスクリプトが Zend_View のインスタンスを作成し、 そのインスタンスに変数を代入します。 2. コントローラが Zend_View に対して適切なビューをレンダリングするように指示し、 それによってコントローラがビュースクリプトを制御します。 そこでビューの出力が作成されます。

### 28.1.1. コントローラスクリプト

単純な例として、本の一覧を扱うコントローラがあることにしましょう。 そのデータをビューに表示することを考えます。 コントローラスクリプトは、おそらくこのようになるでしょう。

    <?php
    // 本の著者およびタイトルを取得するためにモデルを使用します
    $data = array(
        array(
            'author' => 'Hernando de Soto',
            'title' => 'The Mystery of Capitalism'
        ),
        array(
            'author' => 'Henry Hazlitt',
            'title' => 'Economics in One Lesson'
        ),
        array(
            'author' => 'Milton Friedman',
            'title' => 'Free to Choose'
        )
    );

    // 本のデータを Zend_View インスタンスに代入します
    Zend::loadClass('Zend_View');
    $view = new Zend_View();
    $view->books = $data;

    // "booklist.php" というビュースクリプトをレンダリングします
    echo $view->render('booklist.php');
    ?>

### 28.1.2. ビュースクリプト

次に必要なのは、関連付けるビュースクリプト "booklist.php" です。 これは一般的な PHP スクリプトと同じですが、ひとつだけ違いがあります。 Zend_View インスタンスのスコープで実行されるということです。 つまり $this への参照は、Zend_View のインスタンスのプロパティやメソッドを指すことになるのです (コントローラによってインスタンスに代入された変数は、 Zend_View インスタンスの public プロパティとなります)。 したがって、基本的なビュースクリプトはこのようになります。

    <?php if ($this->books): ?>

        <!-- 本の一覧 -->
        <table>
            <tr>
                <th>著者</th>
                <th>タイトル</th>
            </tr>

            <?php foreach ($this->books as $key => $val): ?>
            <tr>
                <td><?php echo $this->escape($val['author']) ?></td>
                <td><?php echo $this->escape($val['title']) ?></td>
            </tr>
            <?php endforeach; ?>

        </table>

    <?php else: ?>

        <p>表示する本がありません。</p>

    <?php endif; ?>

変数の出力時に、"escape()" メソッドでエスケープ処理をしていることに注意しましょう。

前のページ |  | 次のページ
27.5. ホスト名の検証 | ホーム | 28.2. コントローラスクリプト