Respect Validation — зручний інструмент валідації даних

327

Від автора: при розробці веб-додатків дуже часто потрібно валідувати, тобто перевіряти різні дані, наприклад, дані, отримані від користувачів при заповненні полів якоїсь форми. При цьому, якщо програма пишеться з нуля, без використання фреймворків, а практично всі популярні фреймворки володіють вбудованим механізмом валідації даних, то програмістам доведеться самостійно створювати спеціальні методи або функції, а в деяких випадках і цілі бібліотеки, які допоможуть зробити правильну валідацію даних. Тому в даному уроці я хотів би поговорити з Вами про одну дуже цікаву бібліотеку класів, яка реалізує досить зручний і легкий у використанні механізм перевірки та валідації різних даних. Назва цієї бібліотеки Respect/Validation.

Respect Validation — зручний інструмент валідації данихRespect Validation — зручний інструмент валідації даних

Установка бібліотеки

Завантажити цю бібліотеку можна безпосередньо з сервісу gitHub, за адресою https://github.com/Respect/Validation:

Respect Validation — зручний інструмент валідації даних

Але в даному уроці ми використовуємо інструмент composer для установки валідатора. Для цього в командному рядку переходимо в каталог з тестовим сайтом і виконуємо команду:

composer require respect/validation

Після завершення установки, необхідно з папки vendor підключити файл autoload.php:

Отже, бібліотека встановлена і можна приступати до валідації даних.

Методи валідації

Для початку валідації необхідно отримати об’єкт класу Validator для вибраного правила валідації. Правила валидаци визначені у спеціальних класах бібліотеки та визначають, за яким принципом буде перевірятися деяке значення. Список всіх доступних правил наведений на наступній сторінці: https://github.com/Respect/Validation/blob/master/docs/VALIDATORS.md

Respect Validation — зручний інструмент валідації даних

При цьому правила відображаються у вигляді посилань на сторінки детального опису кожного з них. Тепер давайте перевіримо, що значення параметра valid передається через адресний рядок, який відповідає адресі електронної пошти. Для цього створюємо об’єкт класу Validator, правила email (дане правило перевіряє чи відповідає перевіряється значення адресою електронної пошти).

$validator = Respect\Validation\Validator::email();

Далі у отриманого об’єкта викликаємо метод validate(), який повертає TRUE, якщо валідація виконана успішно, і FALSE у випадку невдачі:

$isValid = $validator->validate($item);
if(!$isValid) {
exit(‘Not Valid’);
}

Де параметр $item – це значення, яке перевіряється. При цьому метод validate(), тільки повертає результат перевірки, а якщо потрібно згенерувати виняток, разом із певним повідомленням про результат валідації, то в цьому випадку необхідно використовувати метод assert():

try{
$validator->assert($item);
}
catch(\Respect\Validation\Exceptions\NestedValidationExceptionInterface $ex){
echo $ex->getFullMessage();
exit();
}

Якщо валідація даних не виконується, метод assert(), генерує виняток спеціального інформаційного класу \Respect\Validation\Exceptions\NestedValidationExceptionInterface, і його конструктору передає повідомлення відповідне кожному певним правилом валідації.

Наприклад, якщо значення, яке перевіряється, не містить рядка відповідної адресою електронної пошти, то на екрані ми побачимо наступне:

Respect Validation — зручний інструмент валідації даних

Для перевірки певних значень, ми можемо використовувати кілька правил, просто викликаючи їх по ланцюжку:

$validator = Respect\Validation\Validator::alnum()->noWhitespace()->length(1,15);
try{
$validator->assert($item);
}
catch(\Respect\Validation\Exceptions\NestedValidationExceptionInterface $ex){
echo $ex->getFullMessage();
exit();
}

В даному прикладі, ми перевіряємо, що перевіряється значення відповідає рядку, що містить лише літери англійського алфавіту або цифрибез пропусків і при цьому довжина рядка лежить в межах від 1 до 15 символів. Якщо валідація не буде виконана хоча б за одним із правил – значить, буде згенеровано виключення з відображенням відповідного повідомлення.

Respect Validation — зручний інструмент валідації даних

Для валідації властивостей певних класів, використовується метод attribute(), у якому описуються правила валідації для кожного властивості класу окремо:

$user = new stdClass;
$user->name = ‘Alexandre’;
$user->birthdate = ‘1985-07-01’;
$validator = Respect\Validation\Validator::
attribute(‘name’, Respect\Validation\Validator::string()->length(1,32))
->attribute(‘birthdate’, Respect\Validation\Validator::date());
try{
$validator->assert($user);
}
catch(\Respect\Validation\Exceptions\NestedValidationExceptionInterface $ex){
echo $ex->getFullMessage();
exit();
}

Якщо для валідації використовується кілька правил, то в блоці catch(), моно отримати масив з даними за повідомленнями від кожного використовуваного правила:

$validator = Respect\Validation\Validator::alnum()->noWhitespace()->length(1,15);
try{
$validator->assert($item);
}
catch(\Respect\Validation\Exceptions\NestedValidationExceptionInterface $ex){
echo “;
print_r($ex->findMessages(array(‘alnum’,’noWhitespace’,’length’)));
echo “;
exit();
}

Respect Validation — зручний інструмент валідації даних

Як Ви бачите для кожного правила зарезервовано певну сервісне повідомлення, яке ми можемо замінити на власне, для цього достатньо передати значення для кожної комірки масиву, що передається як параметр методу findMessages():

$validator = Respect\Validation\Validator::alnum()->noWhitespace()->length(1,15);
try{
$validator->assert($item);
}
catch(\Respect\Validation\Exceptions\NestedValidationExceptionInterface $ex){
echo “;
$arr = array(
‘alnum’=>’Користувача повідомлення 1’,
‘noWhitespace’=>’Користувача повідомлення 2’,
‘length’=>’Користувача повідомлення 3’
);
print_r($ex->findMessages($arr));
echo “;
exit();
}

Respect Validation — зручний інструмент валідації даних

На цьому даний урок завірений. Всього Вам доброго і вдалого кодування!!!