Requests

Form Requests

Use Form Request classes for validation and authorization. This keeps controllers clean and centralizes validation logic.

  • Extend Illuminate\Foundation\Http\FormRequest for custom request classes.
  • Define validation rules in the rules() method.
  • Use the authorize() method to control access to the request.

Example:

class StoreUserRequest extends FormRequest
{
    public function authorize()
    {
        return true; // or custom logic
    }
    public function rules()
    {
        return [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:8|confirmed',
        ];
    }
}
  • Inject Form Request classes into controller methods for automatic validation.

Validation

Use Laravel's built-in validation for all user input. Validate in controllers or Form Request classes.

  • Use validation rules for type, length, format, uniqueness, etc.
  • Return clear error messages for failed validation.
  • Use custom validation messages and attributes for better UX.

Example:

$request->validate([
    'name' => 'required|string|max:255',
    'email' => 'required|string|email|max:255|unique:users',
    'password' => 'required|string|min:8|confirmed',
]);
  • Use Validator facade for advanced validation scenarios.

Best Practices

  • Centralize validation logic in Form Request classes.
  • Use custom request classes for complex forms and APIs.
  • Document validation rules and custom messages.
  • Test validation logic with unit and feature tests.
  • Use request data sanitization and normalization as needed.

Example: Custom Validation Message

public function messages()
{
    return [
        'name.required' => 'Please enter your name.',
        'email.unique' => 'This email is already registered.',
    ];
}