なりせなるてず

技術ブログにしたい

FuelPHPで全てのコントローラーにフィルタをかける

全部のコントローラーで決まった処理、例えば認証処理とかを行いたい場合、Symfonyみたいな全部のコントローラーにかかるフィルタが欲しいところですが、用意されてないようです(見つけられてないだけかも)

なので今までずっと、それぞれのコントローラーにbefore(),after()メソッドを書いていたんですが公式ドキュメントをちゃんと読んだら解決できました。

ベースコントローラー

コントローラ - 概要 - FuelPHP ドキュメント

<?php
class Controller_Public extends Controller_Template
{
  public function before()
  {
    parent::before();

    // 認証処理などの共通処理を記述
  }

  public function after($response)
  {
    $response = parent::after($response); 

    // アクション実行後に行いたい共通処理を記述
    return $response;
  }
}

こんな感じで共通処理だけを記述したベースとなるコントローラーを作成します。
そして共通処理を行いたいコントローラーに継承させます。

<?php
class Controller_Top extends Controller_Public
{
  public function before()
  {
    parent::before();
  }

  public function after($response)
  {
    $response = parent::after($response); 
    return $response;
  }

  public function action_index()
  {
     // 処理
  }
}


Controller_Publicを継承することで、毎回before()メソッドなどに処理を書かなくてよくなります。
今回はベースコントローラーをController_Templateを継承して作成しましたが、Controller_HybridでやればTemplateもRestも対応できます。


ちゃんとドキュメント読まなきゃダメですね