Laravel Validation Guide

· 2 min read

Validation is crucial for ensuring data integrity. Laravel provides a robust validation system that is both simple and flexible.

Basic Validation

Use the validate method in controllers to validate incoming data:

$request->validate([
    'email' => 'required|email',
    'password' => 'required|min:8',
]);

Custom Validation Messages

You can customize error messages to make them more user-friendly:

$request->validate([
    'email' => 'required|email',
], [
    'email.required' => 'Email is required.',
    'email.email' => 'Enter a valid email address.',
]);

Form Request Validation

For complex validation logic, use Form Request classes. Create one using Artisan:

php artisan make:request StoreUserRequest

Define rules in the generated request class:

public function rules() {
    return [
        'name' => 'required|string',
        'email' => 'required|email',
    ];
}

You can also add custom authorization logic in the authorize method.

Conditional Validation

Laravel allows you to apply rules conditionally:

$request->validate([
    'password' => ['required', 'min:8'],
    'confirm_password' => Rule::requiredIf($request->has('password')),
]);

Custom Rule Objects

For reusable validation logic, create custom rule objects:

php artisan make:rule Uppercase

Define the validation logic in the passes method:

public function passes($attribute, $value) {
    return strtoupper($value) === $value;
}

Use the rule in your validation:

$request->validate([
    'username' => ['required', new Uppercase],
]);

Validating Nested Arrays

Laravel supports validating complex data structures like nested arrays:

$request->validate([
    'items.*.name' => 'required|string',
    'items.*.quantity' => 'required|integer|min:1',
]);

File Upload Validation

Validate file uploads with rules like file, image, mimes, and max:

$request->validate([
    'profile_picture' => 'required|image|mimes:jpeg,png|max:2048',
]);

Validation Hooks

Use hooks like withValidator to add post-validation logic:

$request->validate([
    'email' => 'required|email',
]);

$validator->after(function ($validator) {
    if ($this->somethingIsWrong()) {
        $validator->errors()->add('field', 'Something is wrong!');
    }
});

Best Practices

  1. Keep Rules DRY: Use Form Requests or custom rules to avoid duplication.
  2. Validate Early: Perform validation as soon as data enters your application.
  3. Use Meaningful Messages: Provide clear and actionable error messages.
  4. Leverage Built-in Rules: Laravel offers a wide range of validation rules—use them before creating custom ones.

Mastering Laravel's validation system will help you build secure and reliable applications. Start applying these techniques in your projects today!

Comments