フィルタは、アクション前後やテンプレート表示前後で、入力値に何らかの処理をまとめて行う機能です。
入力パラメータに対して一括して関数を適用する場合や、テンプレート処理前の表示パラメータに対して一括して処理を
行う場合に効果的です。
フィルタの種類は、グローバルフィルタとアプリケーションフィルタの2種類あります。
種類 | 設定ファイル | 内容 |
---|---|---|
グローバル フィルタ |
SYL_PROJECT_DIR/config/filters.xml | プロジェクト内の全アプリケーションに対して適用するフィルタ |
アプリケーション フィルタ |
SYL_APP_DIR/filters.xml | アプリケーション内のみに適用するフィルタ |
フィルタの実行フェーズは、下記の4つ存在します。
実行フェーズ | メソッド名 | 引数 |
---|---|---|
アクション前 | preAction | (1) データオブジェクト |
アクション後 | postAction | (1) データオブジェクト |
ビュー実行前 | preRender | (1) データオブジェクト |
ビュー実行後 | postRender | (なし) |
フィルタの設定方法は、次のようになります。
(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>
設定が完了したら、実際に動作させてみて、意図した通りに処理されるか確認します。
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> ...