IT-Q

バリデーションはどこに書くのが基本ですか。

FormRequest に切り出すのが基本です。コントローラが膨らまず、認可も同じクラスに書けます。ただし一意性のような整合性は DB 側にも制約を張らないと、同時実行ですり抜けます。

面接官が見ているのはFormRequest の存在を知っているか。

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

  • FormRequest クラスに切り出す
    コントローラが膨らまず、authorize() で認可も一緒に書けます。
  • Blade テンプレートの中でチェックする
    画面側のチェックはブラウザで回避できるので、防御にはなりません。
  • JavaScript でチェックすればサーバー側は不要
    JS は無効化できますし、API を直接叩かれます。
  • モデルの save() の中に書く
    動きはしますが、入力検証はリクエスト層の責務です。エラーメッセージの扱いも面倒になります。

模範解答

FormRequest に切り出すのが基本です。コントローラが検証で膨らむのを防げますし、authorize() で認可も同じクラスに書けます。

ただしバリデーションはあくまで入力の検査なので、一意性のような整合性は DB 側にも制約を張ります。アプリ側のチェックだけだと、同時実行ですり抜けることがあります。