Детский объект Symfony проверяется только как тип, пропуская его собственную проверку

89
9

Я использую Symfony Validator самостоятельно, без компонента forms.


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


#validation.yml
# This is the entity I'm validating against, it checks the type but doesn't then validate
# it against the child entity below.
Greg\PropertyBundle\Entity\Property:
properties:
property_id:
- NotBlank: ~
- Type:
type: string
addresses:
- All:
- Type:
type: Greg\PropertyBundle\Entity\Address

# child entity
Greg\PropertyBundle\Entity\Address:
properties:
city:
- NotBlank: ~
- Type:
type: string


Чтобы вызвать валидатор, я передаю его с помощью DI в одну из моих служб и сделаю следующее:


// Validate the data
$errorList = $this->validator->validate($data);

Я также попробовал это, передав следующие флаги:


$errorList = $this->validator->validate($data, null, true, true);

спросил(а) 2021-01-25T20:06:17+03:00 5 месяцев назад
1
Решение
117

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


Итак, ваша проверка script будет:

#validation.yml
# This is the entity I'm validating against, it checks the type but doesn't then validate
# it against the child entity below.
Greg\PropertyBundle\Entity\Property:
properties:
property_id:
- NotBlank: ~
- Type:
type: string
addresses:
- All:
- Type:
type: Greg\PropertyBundle\Entity\Address
# addresses is array of entities, so use "traverse" option to validate each entity in that array
- Valid: { traverse: true }

# child entity
Greg\PropertyBundle\Entity\Address:
properties:
city:
- NotBlank: ~
- Type:
type: string


Подробнее о "Действительном" ограничении вы можете найти здесь:
http://symfony.com/doc/current/reference/constraints/Valid.html

ответил(а) 2021-01-25T20:06:17+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема