目次
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()
は、登録されているすべてのフィルタパスを取得します。