How to Create Validation in Laravel

Laravel provides a simple and powerful way to validate user input using the validate() method or custom Form Request classes. You can define rules for required fields, data types, max length, and more. Validation errors are automatically redirected with error messages. Blade views can display these errors using the $errors variable. This ensures clean, secure, and reliable form submissions.

Method 1: Using validate() inside Controller

app/Http/Controllers/UserController.php


public function store(Request $request)
{
    $request->validate([
        'name' => 'required|string|max:50',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:6|confirmed',
    ]);

    // Code to save user...
}

confirmed means: password + password_confirmation fields must match.

Method 2: Using Form Request Class

Generate a Form Request:

Put this comment in your project terminal:


php artisan make:request StoreUserRequest

Edit the generated file: app/Http/Requests/StoreUserRequest.php


public function rules()
{
    return [
        'name' => 'required|string|max:50',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:6|confirmed',
    ];
}

Use it in Controller:

app/Http/Controllers/UserController.php

use App\Http\Requests\StoreUserRequest;

public function store(StoreUserRequest $request)
{
    // Validated data
    $data = $request->validated();

    // Save user...
}

Custom Error Messages (Optional)

Add this in validate() or inside the messages() method in FormRequest:

app/Http/Requests/StoreUserRequest.php


$messages = [
    'name.required' => 'Name is required',
    'email.unique' => 'Email is already taken',
];

Display Errors in Blade

In your Blade view (e.g., create.blade.php):


@if ($errors->any())
    <ul>
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
@endif

Summary:

Goal Use
Quick validation $request->validate() in controller
Reusable validation Form Request class
Show errors in Blade Use $errors variable