Что такое Evas-Validate
Evas-Validate — php библиотека из фреймворка Evas-PHP для валидации данных.
Evas-Validate поставляет классы:
- Evas\Validate\Field - для валидации поля
- Evas\Validate\Fieldset - для валидации набора полей
- Evas\Validate\JsonFieldset - для валидации набора полей, переданных в формате json
Отличительные особенности:
- Валидаторы без привязки к данным, которые дают возможность переиспользовать валидаторы для похожих данных. Данные передаются в саму валидации, а не в параметры валидатора.
- Доступна вложенность для наборов полей и json наборов полей
- Кастомизация ошибок
- Экранирование html на уровне валидации, с возможностью тонкой настройки
Пример c валидатором поля
// создаем и настраиваем валидатор поля даты
$field = new Field([
'pattern' => '/^(\d{4})-(\d{2})-(\d{2})$/',
]);
// проверяем значение на полную валидность полю
if (!$field->isValid('2021-07-29')) {
// выведет текст ошибки регулярного выражения
die($field->error);
}
// выводим отвалидированное значение
echo $field->value;
Пример с валидатором набора полей
Пример с вложеными полями
// создаем и настраиваем валидатор набора полей
$fieldset = new Fieldset([
'date' => new DateField,
'id' => new IdField,
]);
// проверяем значения на полную валидность
if(!$fieldset->isValid(['date' => '2021-07-29', 'id' => '20'])) {
// выведет первую попавшуюся ошибку
die($fieldset->errors()->first());
}
// выводим отвалидированное значение
echo $filedset->values['date'];
Пример с вложеным набором полем
// создаем и настраиваем валидатор набора полей
$fieldset = new Fieldset([
'filter' => new Fieldset([
'from' => new DateField,
'to' => new DateField,
]),
]);
// проверяем значения на полную валидность
if (!$fieldset->isValid(['filter' => ['from' => '2021-07-29', 'to' => '2021-07-30']])) {
// выведет первую попавшуюся ошибку
die($fieldset->errors()->first());
}
// выводим отвалидированное значение
echo $fieldset->values['from'];
Вы можете вкладывать бесконечно много наборов полей
$fieldset = new Fieldset([
'filter' => new Fieldset([
'filter2' => new Fieldset([
...
]),
]),
]);
Пример с вложеным JSON набором полей
// создаем и настраиваем валидатор набора полей
$fieldset = new Fieldset([
'filter' => new JsonFieldset([
'from' => new IntField,
'to' => new IntField,
'date' => new DateField,
'name' => new NameField,
]),
]);
// проверяем значения на полную валидность
if(!$fieldset->isValid(['filter' => '{"from": "0", "to": "20", "date": "2021-07-29", "name": "test"}'])) {
// выведет первую попавшуюся ошибку
die($fieldset->errors()->first());
}
// выводим отвалидированное значение
echo $fieldset->values['filter'];
Пример с валидатором JSON набором полей
Пример с вложеными полями
// создаем и настраиваем валидатор JSON набора полей
$jsonfieldset = new JsonFieldset([
'email' => new EmailField,
'password' => [
'min' => 6, 'max' => 30
],
]);
// проверяем значения на полную валидность
if(!$jsonfieldset->isValid('{"email": "test@test.com", "password": "test123"}')) {
// выведет первую попавшуюся ошибку
die($jsonfieldset->errors()->first());
}
// выводим отвалидированное значение
echo $jsonfieldset->values['email'];
Если вкладывается JSON набор полей, то JSON нужно записывать в строку
В качестве примера рассмотрим два JSON`а:
- '{"filter": {"from": "2021-07-29", "to": "2021-07-30" }}'
- '{"filter": "{"from": "2021-07-29", "to": "2021-07-30"}"}'
Разница в них в том, что в одном вложен JSON, а в другом JSON-строка
При проверке валидности первого примера, где вложенным является набор полей, результат будет успешным. При вложенном JSON наборе валидация выдаст ошибку.
Аналогично со вторым примером: при наборе полей - ошибка, при JSON наборе полей - успешная валидация.
Пример с вложеным набором полей
// создаем и настраиваем валидатор JSON набора полей
$jsonfieldset = new JsonFieldset([
'filter' => new Fieldset([
'from' => new DateField,
'to' => new DateField,
]),
]);
// проверяем значения на полную валидность
if(!$jsonfieldset->isValid('{"filter": {"from": "2021-07-29", "to": "2021-07-30" }}')) {
// успешная валидация
die($jsonfieldset->errors()->first());
}
if(!$jsonfieldset->isValid('{"filter": "{"from": "2021-07-29", "to": "2021-07-30"}"}')) {
// выведет ошибку
die($jsonfieldset->errors()->first());
}
Пример с вложеным JSON набором полей
// создаем и настраиваем валидатор JSON набора полей
$fieldset = new JsonFieldset([
'filter' => new JsonFieldset([
'from' => new DateField,
'to' => new DateField,
]),
]);
// проверяем значения на полную валидность
if(!$jsonfieldset->isValid('{"filter": {"from": "2021-07-29", "to": "2021-07-30" }}')) {
// выведет ошибку
die($jsonfieldset->errors()->first());
}
if(!$jsonfieldset->isValid('{"filter": "{"from": "2021-07-29", "to": "2021-07-30"}"}')) {
// успешная валидация
die($jsonfieldset->errors()->first());
}