Laravel使ってみた (4) - Routing Filter -
コントローラー等によりが渡る前などに前後処理等を行ったり出来る。まぁ良くあるパターンとして、コントローラーに処理が回る前に認証状態をチェックしたりとか
フィルター自体の定義はapp/filters.phpに行う
<?php
Router::filter("filterName", function() {
});
っていう感じでフィルターを定義する。beforeFilterとafterAfterで使用する場合、引数の数が異なる
- beforeFilterの場合: function($route, $request[, $value])
- afterFilterの場合: function($route, $request, $response[, $value])
- $requestはIlluminate\HttpRequest
- $responseはIlluminate\HttpResponse
で定義するだけじゃ利用されない。ルーティング定義時に指定することも出来る。もしくは
<?php
class HomeController extends BaseController {
public function __construct() {
$this->beforeFilter("filterName");
// $this->afterFilter("filterName");
}
}
な感じでコンストラクタで指定も出来る模様。又、beforeFilterをURLで大きく適応したい場合とかには
Route::when("*", "filterName");
っていうのを使えば領域にフィルターを一括適応出来る模様
更に、filterはapp/filters.phpに実体を実装する他にfilterメソッドを持つクラスを利用する事も出来る
Route::filter("filterName", "filterClass");
でそのクラスをどこに置くかって所ですが、デフォルトで
- app/commands
- app/controllers
- app/models
- app/database/seeds
なディレクトリがLaravelのクラスローダー機構を利用してロードされるので、それを登録すれば独自のディレクトリをロードさせることも出来る模様。app/start/global.phpで
<?php
ClassLoader::addDirectories(array(
// 省略
app_path()."/filters"
));
って定義すりゃapp/filtersっていうディレクトリ置けば参照できるようになる
ドキュメント読む限りはそんな感じかね