ドキュメント
リリースカレンダー
リンク
SourceForge.jp SourceForge.JPへ
php.net PHP公式サイトへ

フィルタ

 フィルタは、アクション前後やテンプレート表示前後で、入力値に何らかの処理をまとめて行う機能です。
 入力パラメータに対して一括して関数を適用する場合や、テンプレート処理前の表示パラメータに対して一括して処理を 行う場合に効果的です。

1. フィルタの種類

 フィルタの種類は、グローバルフィルタとアプリケーションフィルタの2種類あります。

種類 設定ファイル 内容
グローバル
フィルタ
SYL_PROJECT_DIR/config/filters.xml プロジェクト内の全アプリケーションに対して適用するフィルタ
アプリケーション
フィルタ
SYL_APP_DIR/filters.xml アプリケーション内のみに適用するフィルタ

2. フィルタの実行フェーズ

 フィルタの実行フェーズは、下記の4つ存在します。

実行フェーズ メソッド名 引数
アクション前 preAction (1) データオブジェクト
アクション後 postAction (1) データオブジェクト
ビュー実行前 preRender (1) データオブジェクト
ビュー実行後 postRender (なし)

3. フィルタの設定

 フィルタの設定方法は、次のようになります。

(1) フィルタ用のクラスを作成する
(2) 設定ファイルに作成したフィルタクラスを追加する

(1) フィルタ用のクラスを作成する

 例えば、アクション前に入力パラメータの英字を全て大文字に変換するフィルタを作成する場合、下記のようなコードになります。

<?php
// フィルタ親クラスのロード
SyL_Loader::fw('Filter');

class UpperCaseFilter extends SyL_Filter
{
    /**
     * アクション前フィルタ
     */
    function preAction(&$data)
    {
        // 入力パラメータ全てに一括してstrtoupper関数を適用する
        $data->apply('strtoupper');
    }
}

?>

 (便宜的に)SyL_Filterクラスを継承し、処理を追加したい実行フェーズに対するメソッドを追加して、そのロジックを記述します。

 作成したクラスは、プロジェクトディレクトリ(SYL_PROJECT_DIR)のライブラリディレクトリ(SYL_PROJECT_DIR/lib)以下に保存します。

// 保存ディレクトリ
SYL_PROJECT_DIR/lib/Filters/UpperCaseFilter.php

(2) 設定ファイルに作成したフィルタクラスを追加する

 (1)で作成したクラスを設定ファイル(filters.xml)に追加します。ここでは、アプリケーションフィルタとして登録する例を示します。
※指定ディレクトリに設定ファイル(filters.xml)が存在しない場合は、新規で作成してください。
※設定ファイル(filters.xml)の仕様については、「3.7 設定ファイルの仕様(filters.xml)」を参照

// アプリケーションフィルタ設定ファイル
SYL_APP_DIR/filters.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE syl-filters PUBLIC
  "-//SyL Framework Development Project//DTD Filter Defines 1.0//JP"
  "http://syl.jp/dtds/syl-filters_1_0.dtd">

<syl-filters>

<filter name="UpperCaseFilter"
        path="(.+)\.php"
        class="UpperCaseFilter"
        file="Filters/UpperCaseFilter.php"
        enable="true">
  <preAction>
    <arg type="component" reference="true">data</arg>
  </preAction>
</filter>

</syl-filters>

設定が完了したら、実際に動作させてみて、意図した通りに処理されるか確認します。

4. デフォルトで添付されているフィルタ

 SyLフレームワークには、いくつかデフォルトで添付されているフィルタがあります。

フィルタ名 クラス名 実行内容
認証フィルタ SyL_FilterAuth 詳細は「6.12 認証」参照
文字コード変換フィルタ SyL_FilterConvertEncoding dataオブジェクト内の全パラメータに対して、文字コードを変換する
関数適用フィルタ SyL_FilterFunction dataオブジェクト内の全パラメータに対して、指定した関数を適用する
SyL情報表示フィルタ SyL_FilterInfo 実行しているプロジェクトのSyL情報を表示する

...
<!--
文字コード変換フィルタ設定例
 Shift_JIS から EUC-JP に変換
-->
<filter name="FilterConvertEncoding"
        path="(.+)\.php"
        class="SyL_FilterConvertEncoding"
        file="framework/Filter/SyL_FilterConvertEncoding.php"
        enable="true">
  <preAction>
    <arg type="component" reference="true">data</arg>
    <arg type="value">EUC-JP</arg>
    <arg type="value">Shift_JIS</arg>
  </preAction>
</filter>
...

<!--
関数適用フィルタ設定例
 strtoupper 関数を適用
-->
<filter name="FilterFunction"
        path="(.+)\.php"
        class="SyL_FilterFunction"
        file="framework/Filter/SyL_FilterFunction.php"
        enable="true">
  <preAction>
    <arg type="component" reference="true">data</arg>
    <arg type="value">strtoupper</arg>
  </preAction>
</filter>
...

<!--
SyL情報表示フィルタ定例
-->
<filter name="FilterInfo"
        path="(.+)\.php"
        class="SyL_FilterInfo"
        file="framework/Filter/SyL_FilterInfo.php"
        enable="true">
  <postRender />
</filter>
...