Метадані
Дата оновлення перекладу 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;
}
Далі, додайте конфігурацію компонента Валідатор до класу:
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' => 'Пароль не може співпадати з вашим імʼям',
)));
}
}
Класи
Деякі обмеження дозволяють валідувати обʼєкт цілком. Наприклад, обмеження Зворотного виклику - це загальне обмеження, застосовуване до самого класу.
Уявіть, що клас визначає метод validate()
для зберігання своєї логіки
валідації:
1 2 3 4 5 6 7
// ...
use Symfony\Component\Validator\Context\ExecutionContextInterface;
public function validate(ExecutionContextInterface $context): void
{
// ...
}
Потім додайте конфігурацію компонента Валідатор у клас:
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'));
}
}