Проверка массива CollectionType объекта Symfony 4.2

Я создаю форму, которая может содержать неопределенное количество коллекций входов внутри, которые появляются после нажатия кнопки «Добавить». Я следил за этой документацией: 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.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
1 060
1

Ответы 1

эти правила:

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

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

У них уже есть * @ORM\Column(type = "string", length=255) * @Assert\NotBlank * @Assert\Type("string") */ но они не проходят проверку в CollectionType

Lukenzo 19.02.2019 18:52

Другие вопросы по теме