Laravel ミドルウェア(middleware)
作成日:2019-03-29, 更新日:2023-09-20
基本
ルーティングのタイミングで何かしてくれるのがミドルウェア。
その後、コントローラーやビューに遷移。
ミドルウェアの設定関連
・「app\Http\Kernel.php」で指定されている
・「app\Http\Kernel.php」の「$middleware」は全処理で実行
・「app\Http\Kernel.php」の「$middlewareGroups」「$routeMiddleware」はルーティング時に指定されれば実行
・各ミドルウェアの「handle(){}」が実行されているっぽい
・各ミドルウェアの「handle(){}」の中で「$next($request);」が「次のミドルウェアを実行」という処理
※「$middlewareGroups」は「app\Providers\RouteServiceProvider.php / mapWebRoutes()、mapApiRoutes()」で指定されている
アクセスがときのmiddlewareの流れ
アクセスがあった場合、「app\Http\Kernel.php」内のそれぞれの順番
- まず、「$middleware」を確認
- 次に「$middlewareGroups」の「web」または「api」を確認
- 最後に対象のルーティング設定に「Route::middleware(***)」があれば「$middlewareAliases」を確認
「app\Http\Kernel.php」内のそれぞれの記載順について
- 「$middleware」の記載順は関係ある
- 「$middlewareGroups」の記載順は関係ない
- 「$middlewareAliases」の記載順は関係ない
ミドルウェアが実行される流れ
上から順に実行されるっぽい。
▼「app\Http\Kernel.php」のサンプル
protected $middleware = [ mid01, mid02, ];
▼「app\Http\Middleware\mid〇〇.php」のサンプル
public function handle($request, Closure $next) { // 次のミドルウェア実行前の処理 ~ 〇〇〇 ~ // 次のミドルウェアを実行 $res = $next($request); // (必要なら)次のミドルウェア実行後の処理 ~ 〇〇〇 ~ return $res; }
※「$res = $next($request);」の前後で「ログインチェック」や「特定のヤツを拒否する」とか何かしてあげる
▼処理の流れ
1.「ミドルウェア:mid01」を実行
2.「ミドルウェア:mid01」が「ミドルウェア:mid02」を実行
3.「ミドルウェア:mid02」完了後、「ミドルウェア:mid01」に戻る
エラーにしたい
public function handle($request, Closure $next) { // 次のミドルウェア実行前の処理 ~ 〇〇〇 ~ if ( 条件 ) { return 'エラーメッセージ'; // return view('〇〇〇'); // メッセージじゃなくviewを表示させる場合 } // 次のミドルウェアを実行 $res = $next($request); return $res; }