Afterフィルターをコントローラーで登録する


filters controller

 悩み事

特定のコントローラーの全てのアクションに、アクション実行後にフィルター処理を実行させたい

app/filters.phpを使ったフィルター処理追加以外の方法を知りたい

 解決方法

Controller::afterFilter()を利用します

任意のコントローラーのコンストラクタで登録します

class MyController extends \Controller
{

    public function __construct()
      {
            $this->afterFilter('log');
      }
}

クロージャを使って実装する事も可能です

class MyController extends \Controller
{
      public function __construct()
      {
            // レスポンスのロギング
            $this->afterFilter(function($route, $request, $response)
            {
                  $content = $response->getContent();
                  \File::put(app_storage().'/logs/last_response', $content);
            }
      }
}

 アドバイス

このフィルターがコールされるのはいつですか?

コントローラーのメソッドが実行された後、レスポンスを返却する前にこのフィルターがコールされます
ユーザーにレスポンスを返す直前に何らかの処理が必要な場合に利用すると便利です


Author:Chuck Heintzelman

Editor and Translator:Yuuki Takezawa