LARAVEL

Laravel Validation Rules

February 16, 2024 14 min read

Introduction

Laravel provides powerful validation capabilities to ensure data integrity. This guide covers built-in rules, custom validation, and best practices.

Basic Validation

// Basic controller validation
public function store(Request $request)
{
    $validated = $request->validate([
        'title' => 'required|string|max:255',
        'email' => 'required|email',
        'age' => 'required|integer|min:18',
    ]);
    
    // Validation passes...
}

Built-in Validation Rules

'name' => 'required|string|min:2|max:100',
'email' => 'required|email|unique:users',
'age' => 'required|integer|min:18|max:120',
'password' => 'required|string|min:8|confirmed',
'url' => 'nullable|url',
'file' => 'required|file|mimes:jpg,png|max:2048',
'image' => 'image|max:1024',
'date' => 'date|after:today',
'start_date' => 'date|before:end_date',
'role' => 'in:admin,user,guest',
'status' => 'boolean',
'quantity' => 'numeric|min:0',
'price' => 'decimal:2|min:0',
'username' => 'alpha_num|starts_with:user_',
'phone' => 'regex:/^[0-9\-\+\s]+$/',

Form Requests

// php artisan make:request StoreUserRequest

// app/Http/Requests/StoreUserRequest.php

class StoreUserRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }
    
    public function rules()
    {
        return [
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users',
            'password' => 'required|string|min:8|confirmed',
        ];
    }
}

// Controller usage
public function store(StoreUserRequest $request)
{
    // Validation passed
}

Custom Validation Rules

// Using Rule class
use Illuminate\Validation\Rule;

$validator = Validator::make($data, [
    'role' => [
        'required',
        Rule::in(['admin', 'editor', 'viewer']),
    ],
]);

// Custom Rule class
// php artisan make:rule Uppercase

// Rule class
class Uppercase implements Rule
{
    public function passes($attribute, $value): bool
    {
        return strtoupper($value) === $value;
    }
    
    public function message(): string
    {
        return 'The :attribute must be uppercase.';
    }
}

// Usage
'name' => ['required', new Uppercase()],

Summary

Laravel's validation system is comprehensive and flexible. Use form requests for reusable validation and custom rules for complex logic.

For more Laravel tutorials, see Middleware & Authentication.