##はじめに
「Laravelのミドルウェアって何者?」というレベルの初学者が
ざっくり調べてざっくりまとめました。(Laravel6系です。)
##ミドルウェアって
Laravelにおけるミドルウェアは、コントローラークラスの処理前後に位置し、主にHTTPリクエストのフィルタリングやHTTPレスポンスの変更を担う。認証やCSRF保護などのミドルウェアが用意されていてapp/Http/Middleware
ディレクトリに設置されている。
そして、ミドルウェアは自作できる..!!
##作成手順 (Laravel6)
1.artisanコマンドでミドルウェアクラスを作成
2.ミドルウェアクラスの編集
3.ミドルウェアクラスの登録
1.artisanコマンドでミドルウェアクラスを作成
php artisan make:middleware HogeMiddleware
このコマンドを実行するとapp/Http/Middleware/HogeMiddleware.phpが生成される。
2.ミドルウェアクラスの編集
生成されたHogeMiddleware.phpは下記のようになっているので、
handle()の中に処理を書いていく。
<?php
namespace App\Http\Middleware;
use Closure;
class HogeMiddleware {
public function handle($request, Closure $next)
{
//処理を記述
return $next($request);
}
}
3.ミドルウェアクラスの登録
作成したミドルウェアクラスを使うには、Kernel.phpに記述する必要がある。
一部省略しているがKernel.phpはデフォルトでは下記のようになっている。先ほど作成したHogeMiddlewareクラスを$middle内に追加した。
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\HogeMiddleware::class, //こんな感じに追加
...
];
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
...
],
'api' => [
'throttle:60,1',
'bindings',
],
];
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
...
];
protected $middlewarePriority = [
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\Authenticate::class,
...
];
}
####$middleware
全ての処理に対して必ず実行される。
####$middlewareGroups
配列として、グループ名とその配列の中にグループ化したいミドルウェアを登録していく。
デフォルトでwebとapiが設定されている。webミドルウェアグループはroute/web.php
内の処理に対して実行される。(RouteServiceProviderで設定できるらしい)
####$routeMiddleware
あらかじめキーを割り当てておくことで、RouteやControllerで簡単に使うことができる。
Route::get('admin/profile', function () {
//処理
})->middleware('auth');
####$middlewarePriority
ミドルウェアの優先度を指定できる。
参考:
https://laravel.com/docs/6.x/middleware
https://qiita.com/kurikazu/items/0c57f050f5dfef02b23e
####これで、リクエスト時やレスポンス時にフィルタリングの機能を使うことができる..!!