13.2. フィルタチェイン

ひとつの値に対して、複数のフィルタを指定した順に適用しなければならないことがよくあります。 たとえば、ログインフォームで受け付けるユーザ名を 小文字の英字のみに限定する場合などです。 Zend_Filter は、複数のフィルタを連結する機能を提供しています。 以下のコードで、二つのフィルタをユーザ名に対して適用する方法を説明します。

<?php
// フィルタチェイン機能を使用します
require_once 'Zend/Filter.php';

// この例で使用するフィルタです
require_once 'Zend/Filter/Alpha.php';
require_once 'Zend/Filter/StringToLower.php';

// フィルタチェインを作成し、そこにフィルタを追加します
$filterChain = new Zend_Filter();
$filterChain->addFilter(new Zend_Filter_Alpha())
            ->addFilter(new Zend_Filter_StringToLower());

// ユーザ名をフィルタリングします
$username = $filterChain->filter($_POST['username']);

フィルタは、Zend_Filter に追加した順に適用されます。 上の例では、まずユーザ名から非英字を除去したあとで、 大文字を小文字に変換します。

Zend_Filter_Interface を実装したオブジェクトなら何でも、 フィルタチェインに追加できます。