IT-Q

ミドルウェアはどのタイミングで実行されますか。

$next($request) を呼ぶ前に書けば前処理、呼んだ後に書けば後処理になります。複数のミドルウェアは登録順に入れ子で積まれるため、認証と権限チェックは並び順が意味を持ちます。

面接官が見ているのは実行順の補強。

これは「ミドルウェアに置くのが適切な処理はどれですか。」への追撃質問です。

よくある答えと、面談でどう見られるか

  • コントローラに到達する前。$next() の後に書けばレスポンス生成後の処理になる
    その通りです。複数ある場合は登録順に入れ子で積まれるので、順序が意味を持ちます。
  • レスポンスを返した後だけ
    後処理も書けますが、主な役割は到達前の処理です。
  • アプリケーションの起動時に一度だけ
    リクエストごとに実行されます。
  • ビューがレンダリングされる直前
    レンダリングとは無関係の層で動きます。

面接官は何を見ているか

  • ルートに到達する前に実行されると言えた
  • レスポンス後に処理を書くこともできると知っていた
  • 複数ある場合は登録順に積まれると言えた

模範解答

コントローラに到達する前に実行されます。$next($request) を呼ぶ前に書けば前処理、呼んだ後に書けば後処理(レスポンス生成後)になります。複数のミドルウェアは登録順に入れ子で積まれるので、認証より先に権限チェックを置くと、未認証ユーザーで落ちます。順序が意味を持つ点は意識が必要です。