【Laravel】ミドルウェア
ミドルウェア
webアプリケーションのリクエストとレスポンスの間で動作する、中間的な処理を指す。
Laravelなら、コントローラの処理の前後に位置することが多い。
リクエストがwebアプリに到着
ミドルウェアがリクエストを受け取り、そのリクエストに対して処理をする
コントローラに渡す、というようなイメージ
この逆もある。(コントローラが返す値をミドルウェアが装飾し、ユーザーに返す。)
代表的なもので言うと、Auth。CSRF保護なども有名。
ログインユーザー専用ページにアクセスするリクエスト
ユーザーがログインしていなかったら、リダイレクトなどの処理をリクエストに行って返す感じ。
作ってみる
artisanコマンドで作成できる。
php artisan make:middleware CheckPostLength
app/Http/Middlewareのディレクトリに置かれる。
code:CheckPostLength.php
public function handle($request, Closure $next)
{
// リクエストのpostインプットが10文字以上なら、ホームにリダイレクトという変なミドルウェア
if (mb_strlen($request->post) > 10) {
return redirect('/');
}
return $next($request);
}
return $next($request);で、条件を通過した後、リクエストをその先の処理に渡している。
アプリケーションに届くまでのレイヤーを作っているようなイメージ
リクエスト > ミドルウェア1 > 2 > 3... > webアプリ到達...というような
ミドルウェアを使う
Kernel.phpを編集する必要がある。
code:Kernel.php
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
// この辺に追加しとく
\App\Http\Middleware\CheckPostLength::class,
];
これだけで、ページ遷移などのリクエストに対してミドルウェアが走るようになった。