Laravel使ってみた (4) - Routing Filter -

2013-06-12T00:00:00+00:00 Laravel PHP

コントローラー等によりが渡る前などに前後処理等を行ったり出来る。まぁ良くあるパターンとして、コントローラーに処理が回る前に認証状態をチェックしたりとか

フィルター自体の定義は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っていうディレクトリ置けば参照できるようになる

ドキュメント読む限りはそんな感じかね

ダウンロードしてきたプログラムとかをUbuntuのアプリケーションに登録する方法