I am using event listeners to dynamically modify a form. I want to add another event listener to the second field . I tried this code but it didn't work :
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('Marque', EntityType::class, array(
'class' => 'EK\PlateformeBundle\Entity\Marque',
'placeholder' => '-- Choississez une marque --',
//'mapped' => false
))
->add('Modele', EntityType::class, array(
'class' => 'EK\PlateformeBundle\Entity\Modele',
'placeholder' => '-- Choississez un modèle --',
//'mapped' => false
))
->add('nom', EntityType::class, array(
'class' => 'EK\PlateformeBundle\Entity\Type',
'placeholder' => '-- Choississez une type --',
//'mapped' => false
))
;
$formModifierM = function (FormInterface $form, Marque $marque = null) {
$modeles = null === $marque ? array() : $marque->getAvailableModeles(); // only in a bidirectional relationship
$placeholder = empty($modeles) ? '-- Choississez un modèle --' : '';
$form->add('Modele', EntityType::class, array(
'class' => 'EK\PlateformeBundle\Entity\Modele',
'placeholder' => $placeholder,
'choices' => $modeles,
))
->add('Rechercher', SubmitType::class) ;
};
$formModifierModele = function (FormInterface $form, Modele $modele = null) {
$types = null === $modele ? array() : $modele->getAvailableTypes(); // only in a bidirectional relationship
$placeholder = empty($types) ? '-- Choississez un type --' : '';
$form->add('nom', EntityType::class, array(
'class' => 'EK\PlateformeBundle\Entity\Type',
'placeholder' => $placeholder,
'choices' => $types,
))
->add('Rechercher', SubmitType::class) ;
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) use ($formModifierM ,$formModifierModele){
$form = $event->getForm();
$formModifierM($form, null);
$formModifierModele($form, null);
}
);
$builder->get('Marque')->addEventListener(
FormEvents::POST_SUBMIT,
function(FormEvent $event) use ($formModifierM) {
$form = $event->getForm()->getParent();
$marque = $event->getForm()->getData();
// since we've added the listener to the child, we'll have to pass on
// the parent to the callback functions!
$formModifierM($form, $marque);
}
);
$builder->get('Modele')->addEventListener( // this code did'nt work
FormEvents::POST_SUBMIT,
function(FormEvent $event) use ($formModifierModele) {
$form = $event->getForm()->getParent();
$modele = $event->getForm()->getData();
$formModifierModele($form, $modele);
}
);
}
I didnt find any solution for this problem.Any one can help me please. I found thes same question but it did't work for me How to add an Event Listener to a dynamically added field using Symfony Forms.