[Zend Framework] Zend_View: 独自のビューフィルターを作成する

公式を見る限りビューフィルターという名称で良いのか分からなかったのですが、フィルターも作ってみることにします。
前回作成したビューヘルパーを参考に進めます。

[markdown]

## パスを確認する

推奨されるプロジェクト・ディレクトリ構造」に従って、filters ディレクトリを作成しました。

* application/views/filters

## 作成のためのルールとサンプル

ビューヘルパー作成時のルールを参考に、フィルターを用意しました。

> * [フィルタの書き方 – Zend_Filter – Zend Framework](http://framework.zend.com/manual/1.12/ja/zend.filter.writing_filters.html)
> * [What is a Zend View Filter? – Stack Overflow](http://stackoverflow.com/questions/15802838/what-is-a-zend-view-filter)
> * [Zend Framework – ビューフィルター記述例](http://doremi.s206.xrea.com/zend/etc/viewfilter.html)

サンプルを参考に作成、設置しました。
設置場所、ファイル名、クラス名を揃えます。

“`php:application/views/filters/AllowHtmlTag.php
_helper->layout->getLayoutInstance()->getView()
// ->addFilterPath(‘/views/filters’, ‘Zend_View_Filter_’)
->addFilter(‘AllowHtmlTag’);
// $this->view->addFilter(‘AllowHtmlTag’);
}
“`

下記だけでもOK。action内でもこれで呼べました。

“`php
$this->view->addFilter(‘AllowHtmlTag’);
“`

適用前

view_helper 2013-06-27 13-54-00

適用後

view_filter 2013-07-02 02-36-01

### .phtml ビューファイル内で指定

“`php:application/layouts/scripts/partialLoop.phtml
addFilter(‘AllowHtmlTag’);?>
“`

適用前

Zend_View 2013-06-21-21-25-30

適用後

view_filter 2013-07-02 02-48-30

partialLoopで使うと、その中でのみ機能しました。

## ビューフィルターも作ってみる

AllowHtmlTag の名のとおり、許可したタグだけ通すビューフィルターを作成してみたいと思います。
partialLoop のみに適用します。

“`php:application/views/filters/AllowHtmlTag.php
$allowed_tags,
‘allowAttribs’ => $allowed_attributes,
));
return $filter->filter($str);
}
}
“`

“`php:application/layouts/scripts/partialLoop.phtml
addFilter(‘AllowHtmlTag’); ?>

“`

view_filter 2013-07-02 03-04-51

aside 内の ul タグは通っています。 h3 の escape は効いています。
一方、本文内のフォームタグは影響を受けていません。
意図したとおりの出力を得られたようです。

[/markdown]