Разработчики модулей создавая какой-то модуль часто сталкиваются с задачей валидации форм, которые отправляет пользователь.
Например, практически в любой форме есть поля, которые обязательны для заполнения. Так же есть поля, значения которых нужно проверить на наличие в базе данных, в некоторых полях может находиться файл, размер которого нам нужно проверить, ссылка, правильность которой тоже нужно проверить или же 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());
}