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
.