« そういえば | メイン | Win版Margarineを動かす »

2006年02月17日

Web関連の開発日誌:: mojaviのフィルターチェーン

    

Mojaviにはフィルターチェーンと言うものがある。
これは、Intercepting Filter パターンを実装したものらしいのだが、どうやって使うのかよくわからない。
Intercepting Filter パターン自体は、アスペクト指向ちっくだ。
要は関数をラップするってことだろう。

Mojaviの使い方は、MVCフレームワークMojaviを使ってみようがわかりやすくていいのだが、フィルタチェーンについてはまだ触れられていない。
ってことで、仕方なくソースコードを追った。
GlobalFilterList.class.php をconfig.phpと同じ場所に置くとグローバルフィルタリストクラスを定義することになる。
モジュール直下に置くとモジュールフィルタリストクラスを定義することになる。
グローバルフィルタリストクラスは、常に適用されるフィルタを登録するクラスで、モジュールフィルタリストクラスは、そのモジュールに適用するフィルタを登録するクラス。
モジュールフィルタリストクラスのファイル名は、ModuleNameFilterList.class.php ( ModuleNameの箇所はモジュール名にする ) となる。
当然、クラス名もファイル名に準じる。
また、フィルタリストクラスは、FilterListを継承する。
実装はコンストラクタのみでよく、その中でフィルタを登録するだけ。
記述例は次のような感じ。

function &GlobalFilterList()
{
  parent::FilterList();
  $this->filters['ExecutionTimeFilter'] = &new ExecutionTimeFilter();
}

ExecutionTimeFilterは初めからあるので、
require_once(FILTER_DIR . 'ExecutionTimeFilter.class.php');
とすれば使える。
で、このフィルタは実行時間を計測してHTMLの最後にコメントとして書き込んでくれる。
フィルタとして実にわかりやすい。
もし、他にもフィルタを追加したければ、$this->filters配列にどんどん追加していけばいい。

このフィルタチェーンは本体に手を加えることなく機能を追加するのに実に便利そうだ。
認証処理やリファラーによるブロック、一時公開停止、ユーザー権限付与などのよく使いそうな機能を手軽に付けたりはずしたり出来る。



投稿者 Takenori : 2006年02月17日 09:53




comments powered by Disqus
Total : Today : Yesterday : なかのひと