[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’);
“`
適用前
適用後
### .phtml ビューファイル内で指定
“`php:application/layouts/scripts/partialLoop.phtml
addFilter(‘AllowHtmlTag’);?>
“`
適用前
適用後
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’); ?>
“`
aside 内の ul タグは通っています。 h3 の escape は効いています。
一方、本文内のフォームタグは影響を受けていません。
意図したとおりの出力を得られたようです。
[/markdown]