Je rencontre une erreur de validation "selected options is invalid" lors de la soumission d'un formulaire Symfony avec un champ de tags à autocomplétion.

Ma configuration :

  • Champ TagAutocompleteField
  • Multiple: true, choice_value: 'slug'
  • EventSubscriber pour créer dynamiquement les nouveaux tags

Problème :
Malgré la bonne mise à jour des données dans le subscriber, la validation échoue.

Code :

// EventSubscriber
public function onFormPreSubmit(PreSubmitEvent $event): void
{
    if (!isset($event->getData()['tags'])) {
        return;
    }

    /** @var list<string> $incomingTags */
    $incomingTags = $event->getData()['tags'] ?? [];
    /** @var Tag[] $newTags */
    $newTags = [];

    $existingTags = $this->tagRepository->findExistingTagBySlugList($incomingTags);
    $existingTagsSlug = array_map(function ($v) {
        return $v->getSlug();
    }, $existingTags);

    foreach ($incomingTags as $t) {
        if (!in_array($t, $existingTagsSlug)) {
            $tag = (new Tag())->setTitle($t);
            $this->em->persist($tag);
            $newTags[] = $tag;
        }
    }

    $this->em->flush();

    // Combine existing and new tags
    $allTags = [...$existingTags, ...$newTags];

    // Update the form data with the complete list of tags
    $newFormData = $event->getData();
    $newFormData['tags'] = array_map(function ($tag) {
        return $tag->getSlug();
    }, $allTags);

    $event->setData($newFormData);

    // Set the normalized data (actual Tag objects)
    $event->getForm()->get('tags')->setData($allTags);
}

//TagAutocompleteField
#[AsEntityAutocompleteField]
class TagAutocompleteField extends AbstractType
{

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'class' => Tag::class,
            'choice_label' => 'title',
            'choice_value' => 'slug',
            'attr' => [
                'data-tags' => 'true'
            ],
            'tom_select_options' => [
                'create' => true,
            ],
            'multiple' => true,
            'required' => false,
            'autocomplete' => true,
            'searchable_fields' => ['title'],
            'choice_lazy' => true
        ]);
    }

    public function getParent(): string
    {
        return BaseEntityAutocompleteType::class;
    }
}

//Form

    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        /** @var User $user */
        $user = $this->security->getUser();
        $editing = $builder->getForm()->getData()?->getId() !== null;

        $builder
            ->add('title', null, [
                'label' => 'Titre de l\'article',
            ])
            /** ... **/
            ->add('tags', TagAutocompleteField::class)
            ->addEventSubscriber(new TagsFieldListenerSubscriber($this->em, $this->tagRepository))
            /** ... **/

        ;
    }

Aucune réponse