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.