Просмотр поста

.
Simba
Кадило крутится, лавэха мутится

Разработчики модулей создавая какой-то модуль часто сталкиваются с задачей валидации форм, которые отправляет пользователь.
Например, практически в любой форме есть поля, которые обязательны для заполнения. Так же есть поля, значения которых нужно проверить на наличие в базе данных, в некоторых полях может находиться файл, размер которого нам нужно проверить, ссылка, правильность которой тоже нужно проверить или же email адрес в котором, например, нужно проверить не только корректность текста до и после символа @, но и наличие MX записей для указанного домена.

Как это делалось раньше?
Для каждой проверки писалось отдельное условие, многие простые проверки получались в несколько строк кода, а многие более сложные в десятки и сотни строк кода.

Как это делается теперь?
Просто описываем массив с правилами валидации, создаем экземпляр валидатора и подаем в него поля и правила валидации. Для большинства часто используемых проверок в системе уже есть готовые валидаторы, так же можно дополнить существующие правила своими.

// Массив полей и значений
$data = [
    'test'   => '',
    'number' => 100,
    'email'  => 'email@example.ru',
    'model'  => 110,
];

// Настройки валидатора
$rules = [
    // Название поля => [ правила валидации и их параметры ]
    'test'   => [
        'NotEmpty',
        'StringLength' => [
            'min' => 6,
            'max' => 80,
        ],
    ],
    'number' => [
        'NotEmpty',
        'LessThan' => ['max' => 90],
    ],
    'email'  => [
        'EmailAddress' => [
            'useMxCheck' => true,
        ],
    ],
    'model'  => [
        'ModelExists' => [
            'model' => \Johncms\Users\User::class,
            'field' => 'id',
        ],
    ],
];

// Валидация
$validator = new \Johncms\Validator\Validator($data, $rules);
if ($validator->isValid()) {
    echo 'OK';
} else {
    d($validator->getErrors());
}