目次
Zend_View は、モデル - ビュー - コントローラ パターンにおける 「ビュー」として働くクラスです。 ビューのスクリプトを、モデルおよびコントローラから分離するために存在します。 このクラスでは、 ヘルパーシステム、出力のフィルタリングおよび変数のエスケープ機能を提供します。
Zend_View は、テンプレートシステムに対しては特にこだわりはありません。 テンプレート言語として PHP を使用するか、 あるいは他のテンプレートエンジンのインスタンスを作成して、 それをビュースクリプトの中で操作することができます。
基本的に、Zend_View を使用する際には 2 つの段階をとることになります。 1. コントローラスクリプトが Zend_View のインスタンスを作成し、 そのインスタンスに変数を代入します。 2. コントローラが Zend_View に対して適切なビューをレンダリングするように指示し、 それによってコントローラがビュースクリプトを制御します。 そこでビューの出力が作成されます。
単純な例として、本の一覧を扱うコントローラがあることにしましょう。 そのデータをビューに表示することを考えます。 コントローラスクリプトは、おそらくこのようになるでしょう。
<?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_Loader::loadClass('Zend_View'); $view = new Zend_View(); $view->books = $data; // "booklist.php" というビュースクリプトをレンダリングします echo $view->render('booklist.php'); ?>
次に必要なのは、関連付けるビュースクリプト "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()" メソッドでエスケープ処理をしていることに注意しましょう。
Zend_View
のオプションを設定すると、
ビュースクリプトの振る舞いを変更することができます。
basePath:
は
スクリプトやヘルパー、そしてフィルタを配置する基底パスを指定します。
次のようなディレクトリ構成を想定しています。
base/path/ helpers/ filters/ scripts/ ]
これを設定するには setBasePath()
か
addBasePath()
、あるいはコンストラクタのオプション
basePath
を使用します。
encoding:
は htmlentities()
や
htmlspecialchars()
などで使用する文字エンコーディングを表します。
デフォルトは ISO-8859-1 (latin1) です。
setEncoding()
か、コンストラクタのオプション
encoding
で設定します。
escape:
は escape()
で使用するコールバックを表します。setEscape()
か、コンストラクタのオプション escape
で設定します。
filter:
は、ビュースクリプトをレンダリングした後で使用するフィルタを表します。
setFilter()
か addFilter()
、
あるいはコンストラクタのオプション filter
で設定します。
strictVars:
は、初期化していない変数に Zend_View
からアクセスしようとした際に notice や warning を発生させるようにします。
strictVars(true)
か、あるいはコンストラクタのオプション
strictVars
で設定します。
通常は、assign()
と render()
、
あるいはフィルタ、ヘルパー、スクリプトのパス用の設定メソッドだけで十分事足りるでしょう。
しかし、Zend_View
を独自に拡張したい場合や
その内部にアクセスしたい場合のために、さらにいくつかのメソッドを用意しています。
getVars()
は、設定されているすべての変数を返します。
clearVars()
は、すべての変数の値を消去します。
ビュースクリプトを再利用する際に、
これまで使用していた変数を残しておきたいときなどに便利です。
getScriptPath($script)
は、指定したビュースクリプトのパスを取得します。
getScriptPaths()
は、登録されているすべてのスクリプトパスを取得します。
script paths.
getHelperPath($helper)
は、指定したヘルパークラスのパスを取得します。
getHelperPaths()
は、登録されているすべてのヘルパーパスを取得します。
getFilterPath($filter)
は、指定したフィルタクラスのパスを取得します。
getFilterPaths()
は、登録されているすべてのフィルタパスを取得します。