Проверка массива CollectionType объекта Symfony 4.2 - PullRequest
0 голосов
/ 19 февраля 2019

Я создаю форму, которая может содержать неопределенное количество наборов входов внутри, которые появляются после нажатия кнопки «Добавить».Я следил за этой документацией: https://symfony.com/doc/current/form/form_collections.html и все, кажется, работает нормально.Я могу добавлять, удалять, сохранять и редактировать основные формы и коллекции входов.Сейчас я пытаюсь проверить входные данные, но у меня возникают проблемы с проверкой сущностей CollectionType.Для ввода основной формы я использую проверку следующим образом:

/**
 * @ORM\Column(type="string", length=255)
 * @Assert\NotBlank
 * @Assert\Type("string")
 */
private $name;

А для CollectionType моя проверка выглядит так:

/**
 * @ORM\ManyToMany(targetEntity="App\Entity\Tag", cascade={"persist"})
 * @Assert\All({
 *     @Assert\Collection(
 *     fields = {
 *         "name" = {
 *              @Assert\NotBlank
 *              @Assert\Type("string")
 *             )
 *         },
 *         "desc" = {
 *              @Assert\NotBlank
 *              @Assert\Type("string")
 *             )
 *         }
 *     },
 *     allowMissingFields = false,
 *     allowExtraFields = false
 * )
 * })
 *
 */
private $tags;

Я получаю эту ошибку:

This value should be of type array|(Traversable&ArrayAccess).

Я не знаю, помогает ли это, но, выгрузив ошибку формы, я вижу это:

-propertyPath: "data.tags[0]"
        -invalidValue: Tag {#850 ▼
          -id: null
          -name: null
          -desc: null
        }

Я также определил валидацию для переменных сущностей Tag, но она все еще не работает.

Если я удаляю часть «@Assert \ All», я получаю:

This field is missing. 

ошибка для data.tags [name] и data.tags [desc].А также:

This field was not expected.

для data.tags [0]

РЕДАКТИРОВАТЬ: я закончил создание собственного валидатора в соответствии с https://symfony.com/doc/current/validation/custom_constraint.html

1 Ответ

0 голосов
/ 19 февраля 2019

эти правила:

* @Assert\All({
 *     @Assert\Collection(
 *     fields = {
 *         "name" = {
 *              @Assert\NotBlank
 *              @Assert\Type("string")
 *             )
 *         },
 *         "desc" = {
 *              @Assert\NotBlank
 *              @Assert\Type("string")
 *             )
 *         }
 *     },
 *     allowMissingFields = false,
 *     allowExtraFields = false
 * )
 * })

должны быть помещены в сущность Tag, в каждое поле, которое вы хотите проверить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...