[Zend Framework] Zend_Filter: 独自のフィルターを作成する
前回、ビューフィルタの作成時に、下記あたりがごっちゃになって混乱したので、忘れないようにフィルターの作成についても記しておきます。
- ビューフィルターの書き方と適用範囲
- フィルターの書き方と適用範囲
前回と同じスクリプトで用意してみます。
自作フィルターは、include_path で読み込まれるディレクトリに置かねばなりませんでした。
ファイル名やクラス名も揃えておいた方が良いようです。
<?php
class My_TestFilter implements Zend_Filter_Interface
{
public function filter($str)
{
$allowed_tags = array('a', 'href', 'p', 'br', 'strong', 'li', 'ol', 'ul');
$allowed_attributes = array('href');
$filter = new Zend_Filter_StripTags(array(
'allowTags' => $allowed_tags,
'allowAttribs' => $allowed_attributes,
));
return $filter->filter($str);
}
}
フィルタを使うためには、require などの必要があります。
<?php
require_once 'My/TestFilter.php';
class IndexController extends Zend_Controller_Action
{
本来はビューで行わないと思いますが、フィルターチェインに組み込んでみました。
<?php
$filter = new Zend_Filter();
$filter->addFilter(new My_TestFilter())->addFilter(new Zend_Filter_StringToUpper());
?>
<aside>
<h3><?= $this->escape($this->widgetTitle); ?></h3>
<?= $filter->filter($this->widgetContent) . PHP_EOL; ?>
</aside>
フィルターをかけた部分のみ、許可されていないタグは除かれ、文字は大文字になっています。