📥

LaravelのRequestとFormRequestの違い

に公開

LaravelのRequestFormRequest、それぞれの使い道などが混乱してきたのでメモ書き程度にまとめます👀

✍️ 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