Bonjour,
Il y a des choses qui sont assez obscures pour moi sur comment fonctionne les formulaires dans Symfony.
J'ai envie de pouvoir éditer un élément sur une page avec une fenêtre modale. J'ai donc ajouté sur ma page une div cachée qui contient la fenêtre modale et qui contient un formulaire. Ce formulaire je le passe en argument de ma vue twig grâce au contrôleur.
La ou ca se complique un peu c'est que je veux appeler cette fenêtre modale depuis une liste. Je ne veux pas créer dans ma vue autant de divs cachées qu'il y a d'éléments dans ma liste. Je veux donc une seule div caché qui peut afficher n'importe quel élément de ma liste.
J'ai donc créer une fonction javascript qui est exécuté quand on clique sur le lien éditer d'un des éléments de la liste. Cette fonction va juste renseigner les 2 champs du formulaire de ma fenêtre modale.
Le problème est que quand je fais enregistrer, le contrôleur ignore de quelle entité je veux éditer le contenu vu que je ne passe pas d'id.
Je ne sais pas si je peux ajouter cette idée dans mon formulaire après coup ou créer déjà ce champs et le renseigner dynamiquement ou si tout ca c'est du bricolage et qu'il faut faire autrement.
Le controleur
La vue twig avec la fonction javascript et ma fenetre modale
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 <?php ..... class PrimeVoirController extends Controller { /** * @Route("/voir-prime/{id}", name="voir-prime") */ public function indexAction(Utilisateur $utilisateur,Request $request){ $session = $this->get('session'); $em = $this->getDoctrine()->getManager(); $formutilisateur = $this->get('form.factory')->createNamed('formutilisateur', UtilisateurType::class,$utilisateur); $formprime = $this->get('form.factory')->createNamed('formprime', PrimeType::class); $formeditprime = $this->get('form.factory')->createNamed('formeditprime', PrimeType::class); $listeprimes = $em->getRepository('AKHRootBundle:Prime')->findBy(array('utilisateur' => $utilisateur), array('dateprime' => 'asc'), 200, 0); if ($request->isMethod('POST')) { .... if ($formeditprime->handleRequest($request)->isValid() && $request->request->has('formeditprime')){ $prime = $formeditprime->getData(); dump($formeditprime); $em->flush(); $listeprimes = $em->getRepository('AKHRootBundle:Prime')->findBy(array('utilisateur' => $utilisateur)); $session->getFlashBag()->add('succes', 'La prime est bien mis à jour.'); return $this->render('@AKHRoot/RH/PrimeVoir.html.twig',array('listeprimes' => $listeprimes,'formutilisateur' => $formutilisateur->createView(),'formprime' => $formprime->createView(),'formeditprime' => $formeditprime->createView())); } }
Une autre partie de la meme vue twig qui cree ma liste
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 {% block JSFunction %} function initPrimeModal(id,dateprime,montant){ $("#formeditprime_id").val(id); $("#formeditprime_dateprime").datepicker('setDate', dateprime); $('#formeditprime_montant').val(montant); } {% endblock %} .............. <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button> <h4 class="modal-title">Edition d'une prime</h4> </div> {{ form_start(formeditprime) }} <div class="modal-body"> <table width="100%"> <tr><td> <div class="row"> <div class="col-md-6"> <div class="form-group"> <label class="control-label col-md-3" style="text-align:left">Date prime</label> <div class="col-md-9"> {{ form_widget(formeditprime.dateprime) }} </div> </div> </div> <div class="col-md-6"> <div class="form-group"> <label class="control-label col-md-3" style="text-align:left">Montant</label> <div class="col-md-9"> {{ form_widget(formeditprime.montant) }} </div> </div> </div> </div> </td></tr> </table> </div> <div class="modal-footer"> <button type="button" class="btn default" data-dismiss="modal">Fermer</button> <button id="btn_add_mpca" name="btn_add_mpca" type="submit" class="btn blue"><i class="fa fa-check"></i> Enregistrer </button> </div> {{ form_row(formeditprime._token) }} {{ form_end(formeditprime, {'render_rest': false}) }} </div>
Merci !
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 <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th>Date prime</th> <th>Montant</th> <th></th> <th></th> </tr> </thead> <tbody> {% for prime in listeprimes %} <tr> <td> {% if prime.dateprime %} {{ prime.dateprime|date('d/m/Y') }} {% endif %} </td> <td>{{ prime.montant }}</td> <td> <a onclick="initPrimeModal('{{prime.id}}','{{prime.dateprime|date('d/m/Y')}}','{{prime.montant}}');" data-toggle="modal" href="#editionprime"> <i class="fa fa-edit"></i> Editer </a> </td> <td> <a onclick="return confirm('Etes vous sur de vouloir supprimer ?');" href="{{ path('delete_prime', {'id': prime.utilisateur.id,'primeid': prime.id}) }}" class="btn default btn-xs black"> <i class="fa fa-trash-o"></i>Effacer</a> </td> </tr> {% endfor %} </tbody> </table>
Partager