ミドルウェアはどのタイミングで実行されますか。
$next($request) を呼ぶ前に書けば前処理、呼んだ後に書けば後処理になります。複数のミドルウェアは登録順に入れ子で積まれるため、認証と権限チェックは並び順が意味を持ちます。
面接官が見ているのは実行順の補強。
これは「ミドルウェアに置くのが適切な処理はどれですか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- コントローラに到達する前。$next() の後に書けばレスポンス生成後の処理になる
その通りです。複数ある場合は登録順に入れ子で積まれるので、順序が意味を持ちます。 - レスポンスを返した後だけ
後処理も書けますが、主な役割は到達前の処理です。 - アプリケーションの起動時に一度だけ
リクエストごとに実行されます。 - ビューがレンダリングされる直前
レンダリングとは無関係の層で動きます。
面接官は何を見ているか
- ルートに到達する前に実行されると言えた
- レスポンス後に処理を書くこともできると知っていた
- 複数ある場合は登録順に積まれると言えた
模範解答
コントローラに到達する前に実行されます。$next($request) を呼ぶ前に書けば前処理、呼んだ後に書けば後処理(レスポンス生成後)になります。複数のミドルウェアは登録順に入れ子で積まれるので、認証より先に権限チェックを置くと、未認証ユーザーで落ちます。順序が意味を持つ点は意識が必要です。