Компонент Validator

Дата оновлення перекладу 2023-08-25

Компонент Validator

Компонент Validator надає інструменти для валідації значень, дотримуючись специфікації валідації JSR-303 Bean.

Установка

1
$ composer require symfony/validator

Note

Якщо ви встановлюєте цей компонент поза додатком Symfony, вам потрібно підключити файл vendor/autoload.phpу вашому коді для включення механізму автозавантаження класів, наданих Composer. Детальніше можна прочитати у цій статті.

Використання

See also

Ця стаття пояснює, як використовувати функції Валідатора як незалежного компонента в будь-якому додатку PHP. Прочитайте статтю Валідація для розуміння, як використовувати його у додатках Symfony.

Поведінка компонента Validator засновується на двох концепціях:

  • Обмеження, які визначають правила, що потрібно валідувати;
  • Валідатори, які є класами, що містять саму логіку валідації.

Наступний приклад демонструє, як валідувати так, щоб рядок був як мінімум 10 знаків у довжину:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Validation;

$validator = Validation::createValidator();
$violations = $validator->validate('Bernhard', [
    new Length(['min' => 10]),
    new NotBlank(),
]);

if (0 !== count($violations)) {
    // є помилки, тепер ви можете їх відобразити
    foreach ($violations as $violation) {
        echo $violation->getMessage().'<br>';
    }
}

Метод validate() повертає список порушень в якості обʼєкту, що реалізує ConstraintViolationListInterface. Якщо у вас багато помилок валідації, ви можете відфільтрувати їх за кодом помилки:

1
2
3
4
5
6
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

$violations = $validator->validate(/* ... */);
if (0 !== count($violations->findByCodes(UniqueEntity::NOT_UNIQUE_ERROR))) {
    // розібратися з цією конкретною помилкою (вивести якесь повідомлення, відправити листа і т.д.)
}

Вилучення екземпляра валідатора

Обʼєкт Validator (який реалізує ValidatorInterface) - це головна точка доступу компонента Validator. Щоб створити новий екземпляр цього класу, рекомендується використовувати клас Validation :

1
2
3
use Symfony\Component\Validator\Validation;

$validator = Validation::createValidator();

Цей обʼєкт $validator може валідувати прості змінні на кшталлт рядків, чисел та масивів, але не може валідувати обʼєкти. Щоб зробити це, сконфігуруйте клас Validator так, як пояснюється у наступних розділах.