📥
LaravelのRequestとFormRequestの違い

LaravelのRequestとFormRequest、それぞれの使い道などが混乱してきたのでメモ書き程度にまとめます👀
✍️ Requestとは
Requestは「HTTPリクエスト全体のデータを扱うためのクラス」のこと。
例えば、下記のようにフォームから送信された name や email を取得するときに利用する。
public function store(Request $request)
{
$name = $request->input('name'); // $request->name でもOK
$email = $request->input('email'); // $request->email でもOK
// バリデーション
$validated = $request->validate([
'name' => 'required|string|max:50',
'email' => 'required|email',
]);
// データ保存処理など...
}
特徴
- コントローラーメソッドの引数に直接タイプヒントを付けて利用できる。
- 簡易的なバリデーションが可能だが、コードが長くなりがち。
✍️ FormRequestとは?
FormRequestは「バリデーション専用のクラスを作成できる仕組み」のこと。
php artisan make:request StoreUserRequestのようにコマンドで作成する。
下記のようにrulesメソッドにてバリデーションルールを記載していく。
nameは必須項目(required)、文字列(string)、最大50文字(max:50)、
emailは必須項目(required)、メールアドレス形式(email)
というルールを定義してみる。
// StoreUserRequest.php
public function rules(): array
{
return [
'name' => 'required|string|max:50',
'email' => 'required|email',
];
}
FormRequestを使用したことでコントローラーでの利用は非常にシンプルに!
public function store(StoreUserRequest $request)
{
// バリデーション済みのデータを取得
$validated = $request->validated();
// データ保存処理など...
}
特徴
- バリデーションロジックをコントローラーから分離できる。
- テストや再利用性が高く、コードがスッキリする。
- 認可処理(
authorize()メソッド)も組み込める。
⚖️ RequestとFormRequestの違いまとめ
| 項目 | Request |
FormRequest |
|---|---|---|
| 名前空間 | Illuminate\Http\Request |
Illuminate\Foundation\Http\FormRequest |
| 主な用途 | リクエスト全体の取得 | バリデーションを定義する |
| バリデーション記述 | コントローラー内に直接記述 | 専用クラスに切り出して管理 |
| コードの見通し | 複雑になりやすい | スッキリ&再利用可能 |
| 認可処理 | コントローラーに書く |
authorize()メソッドもOK |
🚀 どちらを使うべき?
小さなフォームであればRequestで十分かも?
中〜大規模、複数箇所で同じバリデーションを使う場合はFormRequestを使うとコードが整理され、保守性が向上する。
📝 まとめ
Requestはシンプルだが、コントローラーにロジックが増えがち。
FormRequestはバリデーションの分離・再利用・認可が可能で、よりクリーンな構成になる。
初心者のうちは、まずはRequestでバリデーションについて慣れて、徐々にFormRequestを実践すると良いのかな?
普段はFlightPHP使ってたけど、色々と便利すぎてLaravelに沼りそう。
Discussion