ミドルウェアとは
laravelでの"ミドルウェア"はhttpアクセスをサーバが受け取った際に、中間に入ってフィルタリングなどをする仕組みである。
例として、ログイン後の画面のアクセス権限があるかを判別して場合によってはリダイレクトさせるために利用される。
Laravelのミドルウェアの設定まとめ
- "php artisan make:middleware クラス名":app/Http/Middleware/にクラスファイルが生成される
- "app/Http/Kernel.php":ミドルウェアを設定する
- "routes/web.php":アクセス時にどのミドルウェアを使うか指定する
ミドルウェアの設定例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php namespace App\Http\Middleware; use Closure; class SampleMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { \Log::debug(get_class()); $res = $next($request); return $res; } } |
$requestでhttpリクエストを受け取って、そのヘッダー情報やクエリー情報を受け取って色々するなりできる。
次のミドルウェアやコントローラに繋げるには$nextクロージャを使う
ミドルウェアの登録例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { // 全てのリクエストで使用するミドルウェア protected $middleware = [ Middleware\SampleMiddleware::class, ]; // グループ毎に分けることもできる protected $middlewareGroups = [ Middleware\SampleMiddleware::class, ]; // 特定のミドルウェアのみを挟むこともできる protected $routeMiddleware = [ 'sample' => Middleware\SampleMiddleware::class, ]; } |
全てのリクエストに挟んだり、グループ毎に分けたり、特定のミドルウェアのみを間に挟むことも可能である。
ルーティングの設定例
1 2 3 4 5 6 |
<?php Route::get('/some', ['middleware' => 'sample', function () { return 'sample'; }]); |
ルーティング以外にもコントローラでもmiddlewareを使うこともできるらしい