Метадані

Дата оновлення перекладу 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'));
    }
}