Кастомизация ошибок

Класс Evas\Validate\ErrorBuilder позволяет собирать шаблонизированные ошибки валидации.

Область видимости

В сборщике ошибок Evas-Validate существуют глобальные и локальные шаблоны по кодам и коды ошибок по типу.

Глобальные шаблоны и коды прописаны изначально в файлах конфигурации и применяются для всех классов. Путь к файлам объявлен в константах. Принцип работы шаблонизатора описан ниже.

Локальные шаблоны и коды может прописывать пользователь для каждого класса. Подробнее о них написано в кастомизации шаблонов.

Будут использоваться глобальные шаблоны и коды,

если шаблоны и коды не были локально объявлены

Принцип работы

Для более понятного вывода ошибок Evas-Validate использует шаблонизацию по кодам. Коды разделены на неизвестные ошибки, ошибки поля и набора полей. Рассмотрим пример ошибки валидации поля:

// создаем и настраиваем валидатор поля
$field = new Field(['min' => 3, 'max' => 10]);

// проверяем значения на полную валидность
if (!$field->isValid('Hi')) {
    // выведет текст ошибки длины
    // в данном случае: 'error.validate.field.length.min'
    die($field->error);
}

Как происходит шаблонизация

На данном примере мы наблюдаем ошибку минимальной длины. Получаем тип ошибки 'minLength', что соответствует коду 6. В файле с глобальными шаблонами ошибок по коду получаем 'error.validate.field.length.min'.

Также Evas-Validate поддерживает русскую локализацию шаблонов, в данном случае будет получаена ошибка 'Значение поля ":label" должно быть длиной< от :min> символов'.

Кастомизация шаблонов

Evas-Validate поддерживает возможность кастомизации шаблонов ошибок и их кодов. Рассмотрим пример с ошибкой валидации поля по регулярному выражению.

В файл шаблонов ошибок по кодам положим следующие значения:

return [
    0 => 'validateError.pattern'
];

А в файл кодов ошибок по типам:

return [
    'pattern' => 0,
];

Пример работы:

// создаем и настраиваем валидатор поля
$field = new Field([
    'pattern' => '/^(\d{4})-(\d{2})-(\d{2})$/',
]);

// проверяем значения на полную валидность
if (!$field->isValid('2021-2121-21')) {
    // выведет текст ошибки регулярного выражения
    // в данном случае: 'validateError.pattern'
    die($field->error);
}