Bonjour à tous,

J'utilise symfony 3.4 et je travaille sur les modification de formualires.

Tout d'abord voici le code mon formulaire :

<?php

namespace AppBundle\Form;
// use ...

class ArticlesCategoriesType extends AbstractType
{
    private $em;
    private $ac;
    private $max_long_arbo;

    public function __construct(EntityManagerInterface $em, ArborescenceCategories $ac, $max_prof_arbo_cat)
    {
        $this->em = $em;
        $this->ac = $ac;
        $this->max_long_arbo = $max_prof_arbo_cat;
    }

    /**
     * Construction du formulaire
     *
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $parents = $this->em->getRepository('AppBundle:Categories')->findByParent(null);
        $builder

            ->add('categorie_enfant1', EntityType::class, [
                'class' => 'AppBundle\Entity\Categories',
                'placeholder' => 'Sélectionnez la gamme',
                'choices' => $parents,
                'mapped' => false,
                'label' => ' '
            ])
            ->add('codeCategorie', HiddenType::class, [
                'label' => ' '
            ]);

            $builder->add('categorie_enfant2', HiddenType::class, [
                'mapped' => false,
                'label' => ' '
            ]);

        $builder->get('categorie_enfant1')->addEventListener(
            FormEvents::POST_SUBMIT,
            function (FormEvent $event){
                $form = $event->getForm();
                /* @var $categorie Categories */
                $categorie = $form->getData();

                $this->addEnfantCategorie($event->getForm(), 2, $categorie);
            }
        );

        $builder->get('categorie_enfant2')->addEventListener(
            FormEvents::POST_SUBMIT,
            function (FormEvent $event){
                $form = $event->getForm();
                 /* @var $categorie Categories */
                 $categorie = $form->getData();
                 $this->addEnfantCategorie($form, 3, $categorie);
            }
        );
     }
}

Dans ce formulaire j'ajoute 3 champs à mon builder, un champ codeCategorie, un champ categorie_enfant1 et categorie_enfant2.
De plus j'ai ajouté un eventlistener au champ categorie_enfant1 et un eventlistener au champ categorie_enfant2.

Voici le code de ma fonction addEnfantcategorie :

<?php
public function addEnfantCategorie(FormInterface $form, $i, Categories $categorie){
        $builder = $form->getParent();
        // récupère les catégories enfants
        $categories = null;
        dump($form->getName().' '.$categorie);
        $categories = $this->em->getRepository('AppBundle:Categories')->findByParent($categorie->getIdCategorie());
        $builder->add('categorie_enfant2', EntityType::class, [
                'class' => 'AppBundle\Entity\Categories',
                'label'=> ' ',
                'placeholder' => 'Sélectionner la catégorie',
                'choices' => $categories,
                'mapped' => false
            ]);
    }

Ce que je fait dans cette fonction c'est je souhaite modifier le champ categorie_enfant2, sauf que la solution que j'ai trouvé pour modifier un champ c'est $builder->add(); Sauf que cette fonction écrase ma confiugration d'origine sur le champ categorie_enfant2, et donc écrase l'action EventListener.

Ce que je voudrais savoir si il existe une autre méthode que $builder->add pour modifier un champ existant dans la formulaire.

J'espère avoir été assez claire, merci.

Aucune réponse