Laravelでリクエストクラスを使ってフォーム処理を分離する方法
生徒
「先生、Laravelでフォームの処理ってControllerに全部書くのが普通ですか?」
先生
「Controllerに直接書くこともできますが、フォーム処理が複雑になるとコードが長くなり読みにくくなります。そこで、Laravelではリクエストクラスを使って処理を分離する方法があります。」
生徒
「リクエストクラスって何ですか?」
先生
「リクエストクラスとは、フォームから送信されたデータの受け取りやバリデーションをまとめて管理できる特別なクラスです。Controllerをスッキリさせるために使います。」
1. リクエストクラスの作成方法
まず、リクエストクラスを作成します。ターミナルで次のコマンドを実行します。
php artisan make:request StoreUserRequest
このコマンドでapp/Http/RequestsフォルダにStoreUserRequest.phpというファイルが作られます。このクラスがフォームのデータ受け取りとバリデーションを担当します。
2. リクエストクラスでバリデーションを設定する
作成されたリクエストクラスを開くと、rules()メソッドがあります。ここにバリデーションルールを書きます。
public function rules()
{
return [
'name' => 'required|max:50',
'email' => 'required|email',
'password' => 'required|min:6'
];
}
例えば、nameは必須で最大50文字、emailは必須かつメール形式、passwordは必須かつ6文字以上としています。
Controllerにバリデーションを直接書く必要がなくなるので、コードが見やすく整理できます。
3. Controllerでリクエストクラスを使う
次に、Controller側でリクエストクラスを使用します。Request型の代わりに、先ほど作成したリクエストクラスを型宣言します。
use App\Http\Requests\StoreUserRequest;
public function store(StoreUserRequest $request)
{
$data = $request->validated(); // バリデーション済みデータを取得
// ここでユーザーを作成したり保存したりする
}
これにより、Controller内ではバリデーションが通った安全なデータだけを扱うことができ、処理が非常にシンプルになります。
4. エラーメッセージのカスタマイズ
リクエストクラス内にはmessages()メソッドを追加することで、各入力項目ごとのエラーメッセージを自由に変更できます。
public function messages()
{
return [
'name.required' => '名前は必須です。',
'email.required' => 'メールアドレスは必須です。',
'email.email' => 'メールアドレスの形式が正しくありません。',
'password.required' => 'パスワードは必須です。',
'password.min' => 'パスワードは6文字以上で入力してください。'
];
}
ユーザーに分かりやすいメッセージを表示できるので、より親切なフォームを作ることができます。
5. リクエストクラスを使うメリット
- Controllerのコードをスッキリさせ、見やすくなる
- バリデーションやルールを再利用しやすくなる
- エラーメッセージの管理が一箇所でできる
- フォーム処理の保守性が高くなる
複雑なフォームや入力項目が多い場合には特に便利です。Laravelのリクエストクラスを活用することで、効率的で安全なフォーム処理を実現できます。