Создание правил валидации

1-ый способ: Замыкание

Создать свой способ валидации можно через замыкание (англ. Closure), также такой способ ещё называют «анонимные функции».

На примере ниже показан пример создания валидации для параметра «color».

$request->validate([
    'title' => 'required',
    'color' => function($attribute, $value, $fail) {
        if ($value != 'green') {
            $fail('The '.$attribute.' value is not a color name');
        }
    },
]);

2-ой способ: Расширение

Правило валидации можно создать в файле app/Providers/AppServiceProvider.php через метод Validator::extend().

# app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Validator;

class AppServiceProvider extends ServiceProvider
{
    // …

    public function boot()
    {
        // создание валидации «is_color»
        Validator::extend('is_color', function ($attribute, $value, $parameters, $validator) {
            return $value == 'green';
        });
    }
}

Теперь в валидации можно указывать параметр «is_color».

$request->validate([
    'color' => 'is_color',
]);

Сообщение об ошибке указывается в файле resources/lang/ru/validation.php.

# resources/lang/ru/validation.php

return [
    'is_color' => 'Поле «:attribute» должно содержать название цвета',
    // …
];

3-ий способ: Создание правила

Также можно создать отдельное правило валидации через команду artisan make:rule.

php artisan make:rule IsColor

В результате будет создан файл app/Rules/IsColor.php.

# app/Rules/IsColor.php

class IsColor implements Rule
{

    // Условие, при котором будет проходиться валидация
    public function passes($attribute, $value)
    {
        return $value == 'green';
    }

    // Сообщение об ошибке
    public function message()
    {
        return 'The :attribute value is not a color name';
    }

}

Теперь это правило валидации можно применять в методе validate().

// Подключение файла валидации
use App\Rules\IsColor;

// …
$request->validate([
    'title' => 'required',
    'color' => new IsColor, // пользовательская валидация
]);