バリデーションはどこに書くのが基本ですか。
FormRequest に切り出すのが基本です。コントローラが膨らまず、認可も同じクラスに書けます。ただし一意性のような整合性は DB 側にも制約を張らないと、同時実行ですり抜けます。
面接官が見ているのはFormRequest の存在を知っているか。
よくある答えと、面談でどう見られるか
- FormRequest クラスに切り出す
コントローラが膨らまず、authorize() で認可も一緒に書けます。 - Blade テンプレートの中でチェックする
画面側のチェックはブラウザで回避できるので、防御にはなりません。 - JavaScript でチェックすればサーバー側は不要
JS は無効化できますし、API を直接叩かれます。 - モデルの save() の中に書く
動きはしますが、入力検証はリクエスト層の責務です。エラーメッセージの扱いも面倒になります。
模範解答
FormRequest に切り出すのが基本です。コントローラが検証で膨らむのを防げますし、authorize() で認可も同じクラスに書けます。
ただしバリデーションはあくまで入力の検査なので、一意性のような整合性は DB 側にも制約を張ります。アプリ側のチェックだけだと、同時実行ですり抜けることがあります。