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




эти правила:
* @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