Form Request là một class kế thừa FormRequest, gom rule validate + quyền truy cập ra khỏi controller.
Laravel tự resolve nó qua type-hint, tự chạy validate trước khi vào body controller; sai thì tự redirect kèm lỗi (web) hoặc trả 422 JSON (API).
php
class StoreOrderRequest extends FormRequest
{
public function authorize(): bool
{
return $this->user()->can('create', Order::class);
}
public function rules(): array
{
return [
'product_id' => ['required', 'exists:products,id'],
'quantity' => ['required', 'integer', 'min:1', 'max:10'],
];
}
public function messages(): array
{
return ['quantity.max' => 'Mỗi đơn tối đa 10 sản phẩm.'];
}
}
public function store(StoreOrderRequest $request)
{
$order = Order::create($request->validated()); // dữ liệu đã sạch
}Lợi ích: controller mỏng, rule tái sử dụng được giữa web và API, authorize() chặn sớm trước cả validate, và validated() chỉ trả về field đã khai báo rule nên tránh mass-assignment ngoài ý muốn.
Với payload phức tạp còn có prepareForValidation() để chuẩn hoá input trước khi chạy rule.