Understanding Form Requests in Laravel
Form Requests in Laravel are custom request classes that encapsulate validation logic and authorization checks for incoming HTTP requests. They provide a clean, reusable, and organized way to handle validation and request authorization outside of controllers, promoting separation of concerns.
Key Features
- Validation – Define rules in a dedicated class, keeping controllers clean and concise.
- Authorization – Check if a user is allowed to make a request before validation.
- Automatic Redirection – Redirects back with errors automatically if validation fails.
- Clean Code – Moves validation logic out of controllers, improving maintainability.
Example Usage:
Creating a Form Request
bash
>php artisan make:request RegisterRequest
Defining Rules
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|string|min:8|confirmed',
];
}
Authorization Check
public function authorize()
{
return true; // or custom logic
}
Using Form Request in Controller
public function register(RegisterRequest $request)
{
$validatedData = $request->validated();
$user = User::create([
'name' => $validatedData['name'],
'email' => $validatedData['email'],
'password' => Hash::make($validatedData['password']),
]);
event(new Registered($user));
Auth::login($user);
return redirect()->route('verification.notice');
}
Advantages
- Centralizes validation logic.
- Promotes reusability across controllers.
- Improves readability and maintainability.
- Supports built-in authorization.
Instead of calling $request->validate([...]) directly inside a controller, you can offload that logic into a Form Request, keeping controllers lean and focused on business logic.