LOG

Laravel5のMiddlewareってなに

Laravel5 メモまとめ

Middlewareとは

リクエストを処理する前(または後に)そのリクエストが適切かをフィルタリングする機能
Laravel4ではFilterと呼ばれていたらしい。


追加

$ php artisan make:middleware Middleware名

でスケルトンが作成される。
作成されたMiddlewareは「Http/Middleware」以下に追加される。


編集

Middlewareの実行タイミングはLaravel5 lifecycleとMVCの図を参照
artisanを使ってMiddlewareのスケルトンを用意した場合、下記のようなコードになっている。

# TestMiddleware

namespace App\Http\Middleware;

use Closure;

class TestMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

handleメソッド内に処理を追加する。
追加した処理は前処理として扱われる。
後処理を追加したい場合は以下のようにする。

# TestMiddleware

namespace App\Http\Middleware;

use Closure;

class TestMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // =====================================================================
        // 前処理
        // =====================================================================
        ...

        $response = $next($request);

        // =====================================================================
        // 後処理
        // =====================================================================
        ...
        return $response;
    }
}

登録

作成したMiddlewareをアプリケーションに登録する。
登録は「app/Http/Kernel.php」か「app/Console/Kernel.php」で行う(はずHTTPしかやったことない)
以下はHTTPkernelの場合のメモ。

エントリポイントは2種類+1あり、どこに登録するかで実行されるタイミングが異なる。

エントリポイント種類
$middlewareすべてのURLに対して適用する
$routeMiddleware特定のルート(URL)に対して適用する
そのため、routingでmiddlewareを指定する必要がある
$middlewareGroups複数の$routeMiddlewareをグループで指定する

参考