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

前回、ビューフィルタの作成時に、下記あたりがごっちゃになって混乱したので、忘れないようにフィルターの作成についても記しておきます。

  • ビューフィルターの書き方と適用範囲
  • フィルターの書き方と適用範囲

前回と同じスクリプトで用意してみます。
自作フィルターは、include_path で読み込まれるディレクトリに置かねばなりませんでした。
ファイル名やクラス名も揃えておいた方が良いようです。

liblary/my/TestFilter.php
<?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 などの必要があります。

application/controllers/IndexController.php
<?php
require_once 'My/TestFilter.php';
class IndexController extends Zend_Controller_Action
{

本来はビューで行わないと思いますが、フィルターチェインに組み込んでみました。

application/layouts/scripts/partialLoop.html
<?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>

フィルターをかけた部分のみ、許可されていないタグは除かれ、文字は大文字になっています。

Zend_Filter 2013-07-04 01-42-00