Создание пользовательских валидаторов в Laravel: подробное руководство

В Laravel пользовательские валидаторы позволяют вам определять свои собственные правила проверки, выходящие за рамки тех, которые предусмотрены инфраструктурой. Они пригодятся, когда вам нужно проверить сложные или конкретные требования к данным в вашем приложении. В этой статье блога мы рассмотрим различные методы создания собственных валидаторов в Laravel, дополненные разговорными объяснениями и примерами кода.

Метод 1: использование валидаторов на основе замыканий
Один из способов создать собственный валидатор в Laravel — использовать валидаторы на основе замыканий. Этот метод позволяет вам определить логику проверки внутри функции закрытия. Допустим, мы хотим проверить, что данное входное значение кратно 5:

Validator::extend('multiple_of_five', function ($attribute, $value, $parameters, $validator) {
    return $value % 5 === 0;
});
// Usage
$request->validate([
    'number' => 'multiple_of_five',
]);

Метод 2: расширение класса Validator
Другой подход — расширить сам класс Validator и определить собственный метод проверки. Этот метод обеспечивает большую гибкость и позволяет организовать собственные правила проверки в отдельном классе. Давайте создадим собственный валидатор, который будет проверять, содержит ли строка только заглавные буквы:

namespace App\Validators;
use Illuminate\Validation\Validator;
class UppercaseValidator extends Validator
{
    public function validateUppercase($attribute, $value, $parameters)
    {
        return strtoupper($value) === $value;
    }
}
// Register the custom validator in a service provider
Validator::extend('uppercase', 'App\Validators\UppercaseValidator@validateUppercase');
// Usage
$request->validate([
    'name' => 'uppercase',
]);

Метод 3: использование объектов правил
Laravel предоставляет объект правил, который позволяет инкапсулировать логику проверки с возможностью повторного использования. Давайте создадим специальное правило, чтобы проверять, является ли данное значение допустимым URL-адресом:

use Illuminate\Contracts\Validation\Rule;
class ValidUrl implements Rule
{
    public function passes($attribute, $value)
    {
        return filter_var($value, FILTER_VALIDATE_URL) !== false;
    }
    public function message()
    {
        return 'The :attribute must be a valid URL.';
    }
}
// Usage
$request->validate([
    'website' => ['required', new ValidUrl],
]);

Пользовательские валидаторы в Laravel позволяют вам расширить возможности проверки платформы в соответствии с требованиями вашего конкретного приложения. В этой статье мы рассмотрели три метода создания пользовательских валидаторов: валидаторы на основе замыканий, расширение класса Validator и использование объектов Rule. Каждый метод предлагает свои преимущества, и его можно выбрать в зависимости от ваших предпочтений и сложности логики проверки.

Используя специальные валидаторы, вы можете быть уверены, что ваше приложение Laravel проверяет данные точно и эффективно, что обеспечивает более надежный и надежный пользовательский интерфейс.