WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
コントローラーフィルター

コントローラーフィルター

このエントリーをはてなブックマークに追加

コントローラーにフィルターをかける方法は、ルーターでコントローラーアクションに対して、フィルターをかける方法と、コントローラーの内部でフィルターをかける方法があります。

ルーターでフィルターをかける

ルーターでフィルターをかけるには、第2引数に配列で、かけるフィルーター名とそのフィルターを使用するコントローラアクションを指定します。

Route::get(‘URI’,[‘before’=>’フィルター名’,’uses’=>’コントローラーアクション’]);

(例)
Route::get(‘home’,[‘before=>’auth’,’uses’=>’HomeController@showWelcome’]);
上記例では、Auth::attempt()で、ユーザー認証を通過しないと、デフォルトのトップページが開きません。つまり、http://localhost/home のページにアクセスしても、認証していないユーザーは自動的にログインページへリダイレクトします。

コントローラ内部でフィルターをかける

コントローラー内部でフィルターをかけるには、コントローラーのコンストラクターで指定する方法と、無名関数を指定し、コンストラクター内で、フィルターを作成する方法、コントローラーメソッドにフィルターを作成する方法があります。それぞれを調べてみましょう。

コンストラクターでフィルターを指定する

それでは、コンストラクターでフィルターをかけてみます。beforeFilterメソッドで、アクションの直前にフィルターをかけ、afterFilterでは、アクション直後にフィルターをかけます。どちらのメソッドも、第1引数に、フィルター名、第2引数に条件を指定します。

(例)app/UserController.php

class UserController extends BaseController{
 public function __construct(){
 $this->beforeFilter('auth',['except'=>'getLogin']);
 $this->beforeFilter('csrf',['on'=>'post']);
 $this->afterFilter('log',['only'=>['fooAction','barAction']]);
 }
 }

2行目:__construct()でコンストラクターを指定します。constructの前のアンダーバーは2つです。
3行目:アクションの前に、’auth’フィルターをかけます。’except’で除外するアクションを指定します。つまり、getLoginアクション以外にフィルターを指定します。
4行目:アクションの前に’csrf‘*フィルターをかけます。’on’=>’post’ で、ポスト送信時のみ、このフィルターをかけることを指示しています。
5行目:アクションの後に’log’フィルターをかけます。’only’で、フィルターをかけるアクションを限定しています。つまり、’fooAction’ と ‘barAction’ のみに、フィルターをかけるように指示しています。

無名関数で、フィルターを指定する

無名関数を使用し、インラインでコントローラーフィルターを指定することも出来ます。

(例) app/UserController.php

class UserController extends BaseController{
 public function __construct(){
 $this->beforeFilter(function(){
 //ここにフィルターを作成する
 });
 }
 }

コントローラーアクションにフィルターを作成する

コントローラアクションにフィルターを作成し、コンストラクターで、@記法で内部のアクションをフィルターとして指定することが出来ます。

(例) app/UserController.php

class UserController extends BaseController{
 public function __construct(){
 $this->beforeFilter(@filterRequests');
 }
 public function filterRequest($route,$request){
 //ここにフィルターを作成する
 }
 }

« »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です