page_adsence

2011年9月7日水曜日

symfonyのfilterに関して

symfonyを久々に使って、filterを使うことになった。
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('ログメッセージ');