フィルタ
フィルタは、ビュースクリプトを実行した後に、表示内容処理を加えるための仕組みです。Zend_Viewのためのフィルタには最初から用意されているものがないため、必要に応じて自分で作成する必要があります。
フィルタはfilterメソッドを持つクラスとして定義します。なお、フィルタの名前やファイル名には次の命名規則があります。
| 要素 | 命名規則 |
| ファイル名 | <フィルタ名(先頭大文字)>.php |
| クラス名 | Zend_View_Filter_<フィルタ名(先頭大文字)> |
フィルタを作成したら、まずそのファイルを「ビューフィルタ関係のファイルを配置するフォルダ」に設置してください。実際にフィルタを使う際には、Zend_ViewのsetFilterメソッドかaddFilterメソッドを利用して、このフィルタをZend_Viewのインスタンスに登録します。
Zend_Viewのフィルタ関係のメソッドは次のとおりです。
| パラメータ | 内容 |
| setBasePath | ビュースクリプト、ヘルパとフィルタの置かれているパスを指定。 |
| setFilter | フィルタを設定します。それまでにフィルタが設定されていた場合には、それは取り除かれます。 |
| addFilter | フィルタを追加します。フィルタは追加された順番で適用されます。 |
| getFilter($name) | $nameという名前のフィルタを取得します。 |
| addFilterPath($path) | $pathをフィルタが記述されたファイルを探す際に、調べるパスに追加します。 |
| setFilterPath($path) | フィルタが記述されたファイルを探すパスとして$pathを登録します(それ以前に登録されていたパスがあった場合は、削除されます)。 |
| getFilterPath($name) | $nameという名前のフィルタへのパスを取得します。 |
では、簡単な例を見てみます。この例では出力された結果にPタグがあった場合、その内側をiタグで囲うようにしてあります。
... $view->setEncoding('Shift_JIS'); $view->setEscape('htmlentities'); $view->setFilter('myFilter'); ...
<?php class Zend_View_Filter_MyFilter { public function filter($buffer) { $buffer = preg_replace('/\<p\>/','<p><i>',$buffer); $buffer = preg_replace('/\<\/p\>/','</i><p>',$buffer); return $buffer; } }
なお、このフィルタのファイルはViewのフィルタフォルダ「C:\codezine\zendapps\views\filters」に設置してください。
これを実行した例は次のようになります。

以前pタグで囲われていた部分(「<b>エスケープのテスト</b>」となっている部分)がiタグで囲われて、斜体になっています。
今回のまとめ
今回はZend_View全体の処理の流れと、エスケープ処理、そしてフィルタについて説明しました。次回はビューヘルパについてと、テンプレートエンジンのSmartyとZend_Viewの連携について説明します。
