Bonjour,
Je rencontre un petit problème avec mon code.
J'ai créer un formulaire permettant de selectionner un client et d'ensuite pouvoir selectionner l'un de ces distributeurs tout cela fonctionne trés bien il n'y a pas de soucis mais lorsque je souhaite faire apparaître le formulaire de Type CollectionType, je n'obtiens rien ( les champs input ne s'affiche pas)
Je vous poste les codes des formulaires me permettant de réaliser la selection de distributeur
ClientGeneDateType.php - Formulaire principal
<?php
namespace App\Form;
*****
class ClientGeneDateType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('Client', EntityType::class, [
'class' => Client::class,
'choice_label' => 'getListClients',
'placeholder' => 'Sélectionnez un client'
]);
$builder->get('Client')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) {
$form = $event->getForm();
$this->addDistributeurField($form->getParent(), $form->getData());
}
);
}
/**
* Ajoute un champ distributeur au formulaire
* @param FormInterface $form
* @param Client $client
*/
private function addDistributeurField(FormInterface $form, Client $client)
{
$builder = $form->getConfig()->getFormFactory()->createNamedBuilder(
'distribeur',
EntityType::class,
null,
[
'class' => Distributeur::class,
'placeholder' => 'Sélectionnez le distributeur',
'choices' => $client->getDistributeurs(),
'auto_initialize' => false,
'required' => false,
]
);
$builder->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) {
//dump($event->getForm()->getData());
$form = $event->getForm();
//dump($form->getData());
$this->addEventDatesField($form->getParent(), $form->getData());
}
);
$form->add($builder->getForm());
}
private function addEventDatesField(FormInterface $form, Distributeur $distributeur = null)
{
//dump($form->getData());
$builder = $form->getConfig()->getFormFactory()->createNamedBuilder(
'EventDates',
CollectionType::class,
$distributeur,
[
'auto_initialize' => false,
'entry_type' => GeneDatesType::class,
'entry_options' => [
'attr' => ['class' => 'date_box']
],
'allow_add' => true,
'prototype' => true,
]
);
//dump($builder->add('EventDates'));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
// Configure your form options here
]);
}
}
GeneDatesType.php
<?php
namespace App\Form;
class GeneDatesType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('Date',TextType::class, [
'label' => 'Date',
'required' => false,
])
->add('Libelle', TextType::class,[
'label' => 'Évènement',
'required' => false,
])
->add('Status', TextType::class,[
'required' => false,
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
]);
}
}
Ce que je souhaite obtenir c'est de pouvoir selectionner un client, un de ces distributeurs et ensuite après la selection de celui-ci avoir un formulaire de Type CollectionType permettant de modifier un Array de ce type avec des input :
array:17 [▼
0 => array:3 [▼
"Date" => "03-03-2021"
"Libelle" => "Mail0"
"Status" => "Pending"
]
1 => array:3 [▼
"Date" => "03-04-2021"
"Libelle" => "Mail1"
"Status" => "Pending"
]
2 => array:3 [▼
"Date" => "03-05-2021"
"Libelle" => "Mail2"
"Status" => "Pending"
]
3 => .....
Et de pouvoir enregistrer ces modifications dans la BDD
Après avoir selectionné le distributeur auquel je souhaite modifier le tableau de date d'évenement, rien ne s'affiche.
Merci de votre aide,