Valid

Дата обновления перевода 2023-01-13

Valid

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

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

Tip

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

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

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

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

class Address { protected $street; protected $zipCode; }

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

class Author
{
    protected $firstName;
    protected $lastName;
    protected $address;
}
  • Attributes
  • YAML
  • XML
  • PHP
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 $street;

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

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

use Symfony\Component\Validator\Constraints as Assert;

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

    #[Assert\NotBlank]
    protected $lastName;

    protected $address;
}

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

  • Attributes
  • YAML
  • XML
  • PHP
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 будет неудачной.

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

Tip

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

Опции

groups

type: array | string

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

payload

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

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

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

traverse

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

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