Метаданные

Класс ClassMetadata представляет и управляет всеми сконфигурированными ограничениями заданного класса.

Свойства

Компонент Валидатор может валидировать публичные, защищённые или приватные свойства. Следующий пример отображает, как валидировать, чтоб свойство $firstName класса Author имело как минимум 3 символа:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
// ...
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    private $firstName;

    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
        $metadata->addPropertyConstraint('firstName', new Assert\NotBlank());
        $metadata->addPropertyConstraint(
            'firstName',
            new Assert\Length(array("min" => 3))
        );
    }
}

Геттеры

Ограничения могут быть также применены в значению, возвращённому любым публичным геттер методом, которые являются методами, имена которых начинаются с get, has или is. Эта функция позволяет валидировать ваши объекты динамически.

Представьте, что по причинам безопасности, вы хотите валидировать, чтобы поле пароля не соответствовало имени пользователя. Для начала,создайте публичный метод под названием isPasswordSafe(), чтобы определить эту пользовательскую логику валидации:

1
2
3
4
public function isPasswordSafe()
{
    return $this->firstName !== $this->password;
}

Далее, добавьте конфигурацию компонента Валидатор к классу:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// ...
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
        $metadata->addGetterConstraint('passwordSafe', new Assert\IsTrue(array(
            'message' => 'The password cannot match your first name',
        )));
    }
}

Классы

Некоторые ограничения позволяют валидировать объект целиком. Например, ограничение Обратного вызова - это общее ограничение, применяемое к самому классу.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.