Компонент Validator

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

Компонент Validator

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

Установка

1
$ composer require symfony/validator

Также вы можете клонировать репозиторий https://github.com/symfony/validator.

Note

Если вы устанавливаете этот компонент вне приложения Symfony, вам нужно подключить файл vendor/autoload.php в вашем коде для включения механизма автозагрузки классов, предоставляемых Composer. Детальнее читайте в этой статье.

Использование

See also

Эта статья объясняет как использовать функции Validator как независимого компонента в любом приложении PHP. Прочитайте статью Валидация для понимания как использовать его в приложениях Symfony.

Поведение компонента Validator основывается на двух концептах:

  • Ограничения (Constraints), которые определяют правила, которые нужно валидировать;
  • Валидаторы, которые являются классами, содержащими саму логику валидации.

Следующий пример показывает, как валидировать, чтобы строка была как минимум 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 object (который реализует ValidatorInterface) - это основная точка доступа компонента Validator. Чтобы создать его новый экземпляр, рекомендуется использовать классValidation:

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

$validator = Validation::createValidator();

Этот объект $validator может валидировать простые переменные вроде строк, чисел и массивов, но не может валидировать объекты. Чтобы сделать это, сконфигурируйте класс Validator так, как объясняется в следующих разделах.