Bonjour,
Dans un formulaire j'ai un collection d'entitées, j'ai donc ajouter le champs collection comme il faut
Quand je vais sur mon formulaire et que j'ajoute un item et que j'enregistre ça le sauvegarde bien
Sauf que si j'en rajoute plus d'un lors je l'enregistrement j'ai une erreur sur la requête qui a NULL dans le champs de référence.
Je pense que mon problème peut venir du JS :
Ou de mon controller
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 <script type="text/javascript"> $(document).ready(function() { // On récupère la balise <div> en question qui contient l'attribut « data-prototype » qui nous intéresse. var $container = $('div#egs_userbundle_contacttype_Datas'); // On ajoute un lien pour ajouter une nouvelle catégorie var $lienAjout = $('<a href="#" id="ajout_data" class="btn">Ajouter une donnée</a>'); $container.append($lienAjout); // On ajoute un nouveau champ à chaque clic sur le lien d'ajout. $lienAjout.click(function(e) { ajouterData($container); e.preventDefault(); // évite qu'un # apparaisse dans l'URL return false; }); // On définit un compteur unique pour nommer les champs qu'on va ajouter dynamiquement var index = $container.find('input[id$="contenu"]').length; // On ajoute un premier champ directement s'il n'en existe pas déjà un (cas d'un nouvel article par exemple). if (index == 0) { ajouterData($container); } else { // Pour chaque catégorie déjà existante, on ajoute un lien de suppression $container.children('div').each(function() { ajouterLienSuppression($(this)); }); } // La fonction qui ajoute un formulaire function ajouterData($container) { // Dans le contenu de l'attribut « data-prototype », on remplace : // - le texte "__name__label__" qu'il contient par le label du champ // - le texte "__name__" qu'il contient par le numéro du champ var $prototype = $($container.attr('data-prototype').replace(/__name__label__/g, 'Donnée n°' + index) .replace(/__name__/g, index)); // On ajoute au prototype un lien pour pouvoir supprimer la catégorie ajouterLienSuppression($prototype); // On ajoute le prototype modifié à la fin de la balise <div> $container.append($prototype); // Enfin, on incrémente le compteur pour que le prochain ajout se fasse avec un autre numéro index++; } // La fonction qui ajoute un lien de suppression d'une catégorie function ajouterLienSuppression($prototype) { // Création du lien $lienSuppression = $('<a href="#" class="btn btn-danger">Supprimer</a>'); // Ajout du lien $prototype.append($lienSuppression); // Ajout du listener sur le clic du lien $lienSuppression.click(function(e) { $prototype.remove(); e.preventDefault(); // évite qu'un # apparaisse dans l'URL return false; }); } }); </script>
Quand j'ajoute qu'une donnée ça marche dès que j'en mets plusieurs ça plante ma requête
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
33
34
35
36
37 public function updateAction(Request $request, $id) { $this->get('session')->getFlashBag()->add('info', 'Contact updateAction'); $em = $this->getDoctrine()->getManager(); $contact = $em->getRepository('EgsUserBundle:Contact')->find($id); if (!$contact) { throw $this->createNotFoundException('Unable to find Contact entity.'); } $contact_data = new ContactData(); $contact->addDatas($contact_data); $contact_data->setContact($contact); $deleteForm = $this->createDeleteForm($id); $editForm = $this->createForm(new ContactType(), $contact); $editForm->bind($request); if ($editForm->isValid()) { $em->persist($contact); $em->flush(); $this->get('session')->getFlashBag()->add('info', 'Contact updateAction -> flush'); return $this->redirect($this->generateUrl('contact_edit', array('id' => $id))); } $this->get('session')->getFlashBag()->add('err', 'Contact updateAction -> non valid'); return $this->render('EgsUserBundle:Contact:edit.html.twig', array( 'entity' => $contact, 'edit_form' => $editForm->createView(), 'delete_form' => $deleteForm->createView(), )); }
J'ai aussi un autre problème, lors de l’appuie sur le bouton supprimer, ça me supprime bien la donnée de la page, mais quand je valide le formulaire et que je reviens sur la page, la donnée n'a pas était supprimée ... Ces deux problèmes sont peut être liés ...
Merci par avance pour votre aide.
Partager