Salut à tous,
Je continue mon apprentissage de Symfony et je me heurte aujourd'hui à un problème d'imbrication de plusieurs formulaires dans un principal.
Mon entité principal contient deux attributs "Collection" : $activites et $visiters
Mon formulaire de base est comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 class IndivType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('nom', 'text', array('label'=>'Nom : ', 'required' => true)) ->add('prenom' , 'text', array('label'=>'Prénom : ', 'required' => true) ->add('date_Arr' , 'date', array('widget' => 'single_text', 'required' => false, 'format' => 'dd/MM/yyyy', 'data_timezone' => "Europe/Paris", 'user_timezone' => "Europe/Paris", 'label' => 'Date d\'arrivée : ', 'attr' => array('placeholder'=>"jj/mm/aaaa") ) ) ..../.... ->add('visiters', 'collection', array('type' => new VisiterType(), 'allow_add' => true , 'prototype' => true , 'allow_delete' => true , 'by_reference' => false , 'required' => false ) ) ->add('activites' , 'collection', array('type' => new ActiviteType() , 'allow_add' => true , 'prototype' => true , 'allow_delete' => true , 'by_reference' => false , 'required'=> false));
Dans le index.html.twig, j'ai installé un système à onglet avec Jquery pour y intégré les sous-formaires.
Grace à Arnooo999, et à "Pizza", l'insertion du premier formulaire est impec. Je peux aisément rajouter des lignes et en supprimer.
Lorsque j'insère le second cela se passe bien aussi. Mais lorsque je veux insérer une ligne dans l'un des deux, il y a mélange dans d'insertion.
Mes deux fichiers javascritp sont égaux mis à part les noms de variables et les balises :
visiter.js :et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 $(document).ready(function(){ var ajout = function() { var index = $('#tabVisit tbody tr').length; var rowVisit = $('script[type="text/html"]').text().replace(/__name__/g, index); $('#tabVisit tbody').append(rowVisit); }; $('#tabVisit thead a').click(function(event){ if ($(this).text() === "Ajouter un pays") { ajout(); } event.preventDefault(); });
activites.js
Après avoir regardé un peu partout, j'ai essayé de faire apparaitre les deux "data-prototype". Ils sont là avec des valeurs différentes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 $(document).ready(function(){ var add = function() { var index = $('#tabAct tbody tr').length; var row = $('script[type="text/html"]').text().replace(/__name__/g, index); $('#tabAct tbody').append(row); };$('#tabAct thead a').click(function(event){ if ($(this).text() === "Ajouter une activité") { add(); } event.preventDefault(); });
Malheureusement, lorsque j'essaie d'insérer un nouvelle ligne dans l'un des deux sous-formulaire, j'obtiens deux lignes :
- une pour le sous formulaire activites
- une pour le sous formulaire visiter
Y 'a-t-il un moyen pour différencier efficacement les deux insertions ?
Si vous avez une idée, je suis preneur.
Bonne journée
Partager