Метаданные
Дата обновления перевода 2023-08-21
Метаданные
Класс ClassMetadata представляет и управляет всеми сконфигурированными ограничениями заданного класса.
Свойства
Компонент Validator может валидировать публичные, защищённые или приватные
свойства. Следующий пример отображает, как валидировать, чтоб свойство $firstName
класса Author
имело как минимум 3 символа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// ...
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Mapping\ClassMetadata;
class Author
{
private string $firstName;
public static function loadValidatorMetadata(ClassMetadata $metadata): void
{
$metadata->addPropertyConstraint('firstName', new Assert\NotBlank());
$metadata->addPropertyConstraint(
'firstName',
new Assert\Length(["min" => 3])
);
}
}
Геттеры
Ограничения могут быть также применены в значению, возвращённому любым
публичным геттер методом, которые являются методами, имена которых
начинаются с get
, has
или is
. Эта функция позволяет валидировать
ваши объекты динамически.
Представьте, что по причинам безопасности, вы хотите валидировать, чтобы поле
пароля не соответствовало имени пользователя. Для начала,создайте публичный метод
под названием isPasswordSafe()
, чтобы определить эту пользовательскую логику
валидации:
1 2 3 4
public function isPasswordSafe(): bool
{
return $this->firstName !== $this->password;
}
Далее, добавьте конфигурацию компонента Validator к классу:
1 2 3 4 5 6 7 8 9 10 11 12 13
// ...
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Mapping\ClassMetadata;
class Author
{
public static function loadValidatorMetadata(ClassMetadata $metadata): void
{
$metadata->addGetterConstraint('passwordSafe', new Assert\IsTrue([
'message' => 'The password cannot match your first name',
]));
}
}
Классы
Некоторые ограничения позволяют валидировать объект целиком. Например, ограничение Обратного вызова - это общее ограничение, применяемое к самому классу.
Представьте, что класс определяет метод validate()
для хранения своей
логики валидации:
1 2 3 4 5 6 7
// ...
use Symfony\Component\Validator\Context\ExecutionContextInterface;
public function validate(ExecutionContextInterface $context): void
{
// ...
}
Потом добавьте конфигурацию компонента Validator в класс:
1 2 3 4 5 6 7 8 9 10 11
// ...
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Mapping\ClassMetadata;
class Author
{
public static function loadValidatorMetadata(ClassMetadata $metadata): void
{
$metadata->addConstraint(new Assert\Callback('validate'));
}
}