LaravelでFormRequestを使ったフォーム設計のベストプラクティス
生徒
「Laravelでフォームの入力チェックって、毎回コントローラに書くのは大変ですよね?」
先生
「その通りです。そんなときに便利なのがFormRequestです。フォームのバリデーションを専用のクラスにまとめられます。」
生徒
「FormRequestって具体的にどう使うんですか?」
先生
「順を追って説明しましょう。まずは作成方法からです。」
1. FormRequestの作成方法
Laravelでは、artisanコマンドでFormRequestを作成できます。FormRequestはフォームの入力をまとめて管理し、バリデーションや認可を簡単に行えるクラスです。
php artisan make:request StoreUserRequest
これによりapp/Http/RequestsディレクトリにStoreUserRequest.phpが作成されます。
2. バリデーションルールの定義
作成したFormRequestクラスのrules()メソッドで、フォームの入力チェックルールを定義します。ルールは配列形式で指定します。
public function rules()
{
return [
'name' => 'required|string|max:50',
'email' => 'required|email|unique:users,email',
'password' => 'required|string|min:8|confirmed',
];
}
例えばrequiredは必須、stringは文字列、max:50は最大50文字といった意味です。confirmedは確認用パスワードと一致しているかを確認します。
3. 認可処理の設定
FormRequestにはauthorize()メソッドがあります。ここでユーザーがこのフォームを送信する権限があるかをチェックできます。
public function authorize()
{
return auth()->check(); // ログインしていれば許可
}
例えば、管理者だけが特定のフォームを送信できる場合は、条件を追加することも可能です。
4. コントローラでの利用
コントローラではFormRequestを型ヒントとして受け取るだけで、バリデーションと認可が自動的に適用されます。
use App\Http\Requests\StoreUserRequest;
public function store(StoreUserRequest $request)
{
$data = $request->validated(); // バリデーション済みデータを取得
\App\Models\User::create($data);
return redirect()->route('users.index')->with('success', 'ユーザーを作成しました');
}
バリデーションエラーがある場合は、自動で前の画面にリダイレクトされ、エラー情報がセッションに保存されます。
5. FormRequest活用のベストプラクティス
- フォームごとに専用のFormRequestを作成して、コントローラをシンプルに保つ
- ルールはわかりやすくコメントをつけると保守性が向上
- 認可は
authorize()にまとめて、権限管理を統一 - カスタムエラーメッセージは
messages()メソッドで定義可能 - 複雑な条件分岐のバリデーションは
withValidator()で追加可能
6. まとめの補足ポイント
FormRequestを使うことで、フォームの入力チェック、認可、エラーメッセージ管理を一か所にまとめられます。コントローラがシンプルになり、保守性や再利用性も向上します。初心者でも慣れてくると、プロジェクトの規模が大きくなった場合に非常に役立つ技術です。