symfonyの中核を担っているらしいフィルタの機能ですが、今回初めて使ってみた。
フィルタは必ず通るので、全部に対して通したい場合は比較的楽なんですが、
ユーザーのステータスを見て、どこかにリダイレクトとかさせたりする場合は、
下手をすると無限ループに陥るので注意が必要。
一度無限ループに陥ると、どういう状態になっているのか分からなくなってしまうので、
きちんと状態をログファイルに出力するようにしたほうがよい。
filterの設置場所は以下の通り。
project_root/app/アプリ名/lib/filter/~Filter.class.php
基本的な書き方としては以下の通り。
<?php
class myTestFilter extends sfFilter
{
public function execute($filterChain)
{
// 入力時に実行されるfilter
if ($this->isFirstCall())
{
// contextとかはこうやって取れる
$context = $this->getContext();
$user = $context->getUser();
$controller = $context->getController();
$request = $context->getRequest();
}
$filterChain->execute();
// 出力時に実行されるfilter
}
}
ちなみにログの出力方法はこんな感じ。
$logger = sfContext::getInstance()->getLogger();
$logger->info('ログメッセージ');