Valid

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

Valid

Это ограничение используется, чтобы подключить валидацию в объектах, которые встроены в качестве свойств в валидируемом объекте. Это позволяет вам валидировать объект и все подобъекты, связанные с ним.

??????????? ? ???????? ??? ??????
????? Valid

Tip

По умолчанию, опция error_bubbling включена для коллекции типов поля, которая передаёт ошибки родительской форме. Если вы хотите присоединить ошибки к локациям, где они происходят, то вам нужно установить error_bubbling, как false.

Базовое применение

В следующем примере создайте два класса: Author и Address, оба из которых имеют ограничения свойств. Более того, Author хранит экземпляр Address в свойстве $address.

// src/Entity/Address.php namespace AppEntity;

class Address { protected string $street;

protected string $zipCode;

}

1
2
3
4
5
6
7
8
9
10
11
// src/Entity/Author.php
namespace App\Entity;

class Author
{
    protected string $firstName;

    protected string $lastName;

    protected Address $address;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// src/Entity/Address.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Address
{
    #[Assert\NotBlank]
    protected string $street;

    #[Assert\NotBlank]
    #[Assert\Length(max: 5)]
    protected string $zipCode;
}

// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\NotBlank]
    #[Assert\Length(min: 4)]
    protected string $firstName;

    #[Assert\NotBlank]
    protected string $lastName;

    protected Address $address;
}

С таким отображением, возможно успешно валидировать автора с невалидным адресом. Чтобы избежать этого, добавьте ограничение Valid к свойству $address.

1
2
3
4
5
6
7
8
9
10
// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\Valid]
    protected Address $address;
}

Если вы валидируете автора с невалидным адресом, вы увидите, что валидация полей Address будет неудачной.

1
2
AppBundle\\Author.address.zipCode:
    Это значение слишком длинное. Оно должно иметь 5 знаков или меньше.

Tip

Если вы также хотите валидировать, что свойство address является экземпляром класса App\Entity\Address, добавьте ограничение Type.

Опции

groups

type: array | string default: null

It defines the validation group or groups of this constraint. Read more about validation groups.

Note

В отличие от других ограничений, ограничение Valid не использует группу
Default. Это означает, что оно всегда будет применяться по умолчанию,
даже если вы укажете группу при вызове валидатора. Если вы хотите ограничить ограничение подмножеством групп, вам нужно определить опцию groups.

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

payload

тип: mixed по умолчанию: null

Эта опция может быть использована, чтобы добавить к ограничению произвольные данные, относящиеся к домену. Сконфигурированная нагрузка не используется компонентом Валидатор, но его обработка полностью зависит от вас.

Например, вы можете захотеть исользовать несколько уровней ошибок, чтобы представить неудачные ограничения в фронт-энде по-разному, в зависимости от степени сложности ошибки.

traverse

тип: boolean по умолчанию: true

Если это ограничение применяется к свойству, содержащему массив объектов, то каждый объект в этом массиве будет валидирован только, если эта опция установлена, как true.