Bonjour,
voilà j'aurais voulu savoir comment on faisait pour renvoyer 2 formulaires sur la meme page ?
je m'explique, j'ai ma page index.html qui contient la liste de mes éléments + 2 listes déroulantes pour faire des filtres (intégrées dans indexAction avec affichage de mes éléments, la méthode renvoi donc la liste des éléments et les forms).
voici le code :
mes filtres ont chacun une méthode du meme controller (typeAction et etatAction) pour définir leurs actions (qui fonctionne) et chaque méthode renvoie le résultat sur la page index.html.twig
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 /** * Lists all Serveur entities and list type * * @Route("/", name="serveur_home") * @Method("GET") * @Template() */ public function indexAction() { $em = $this->getDoctrine()->getManager(); $form = $this->listTypeForm(); $etaForm = $this->listEtatForm(); $entities = $em->getRepository('MuBundle:Serveur')->findAll(); return array( 'entities' => $entities, 'form' => $form->createView(); 'etaForm' => $etaForm->createView(); ); }
pour exemple, code de création d'un form
et methode action :
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 public function listTypeForm() { $libelle = new TypeServeur(); $form = $this->createFormBuilder($libelle) ->add('libelle', 'entity', (array( 'class' => 'MuBundle:TypeServeur', 'placeholder' => 'types de serveurs', 'label' => ' ', ))) ->add('submit', 'submit', array('label' => 'lister')) ->setMethod('GET') ->getForm(); return $form; }
et le template :
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 public function typeAction(Request $request) { $em = $this->getDoctrine()->getManager(); $form = $this->listTypeForm(); $form->handleRequest($request); // si le formulaire est valide, cela retourne la liste des serveurs en fonction de leur type if($form->isValid()){ $filtre= $form['libelle']->getData(); $strfilter = (string) $filtre; $entities = $em->getRepository('SiamuBundle:Serveur')->byfilter($strfilter); return $this->redirectToRoute('serveur_home', array( 'entities' => $entities, )); } // sinon cela retourne la liste de tous les serveurs else{ $entities = $em->getRepository('SiamuBundle:Serveur')->findAll(); } return $this->render('SiamuBundle:Serveur:index.html.twig', array( 'entities' => $entities, 'form' => $form->createView(), )); }
sauf que lorsque je valide un choix dans ma liste déroulante "type" par exemple, la page s'actualise mais le filtre ne se fait pas.
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 {% extends '::base.html.twig' %} {% block body -%} <h1>Tous les serveurs</h1> <table class="records_list"> <div class="listType"> {{ form_start(form) }} {{ form_row(form.libelle) }} {{ form_end(form) }} </div> <div class="listEtat"> {{ form_start(etatForm) }} {{ form_row(etatForm.libelle) }} {{ form_end(etatForm) }} </div> <br/> <thead> <tr> <th>Nom</th> <th>Etat</th> <th>Description</th> <th>Datecreation</th> <th>Actions</th> </tr> </thead> <tbody> {% for entity in entities %} <tr> <td><a href="{{ path('serveur_show', { 'id': entity.id}) }}" onclick="window.open(this.href, 'détail serveur', 'height=100, width=400, toolbar=no, menubar=no,' + ' scrollbar=no, resizable=no, location=no, directories=no, status=no');return(false);">{{ entity.nom }}</a></td> <td>{{ entity.EtatServeur }}</td> <td>{{ entity.description }}</td> <td>{% if entity.dateCreation %}{{ entity.dateCreation|date('Y-m-d H:i:s') }}{% endif %}</td> <td> <ul> <li style="list-style-type: none"> <a href="{{ path('serveur_edit', { 'id': entity.id }) }}"><img src="{{ asset('bundles/siamu/image/modif.png') }}" alt="Modifier"/></a> </li> </ul> </td> </tr> {% endfor %} </tbody> </table> {% endblock %}![]()
je pense que comme chaque méthode renvoi un formulaire et comme symfony ne récupère les infos que de la 1ere méthode quand il y a plusieurs infos qui sont envoyées sur la même page, je pense donc qu'il y a un écrasement de mes données envoyées...
est-ce que vous pourriez me conseiller une autre méthode d'approche svp ?
Je pensais envoyer l'affichage de mes listes déroulantes dans une page du style : form.html.twig, envoyé les réponses dans une autre page du style result.html.twig
et faire des includes de ces pages dans mon index.html...
est-ce faisable ?
est-ce qu'il existe un moyen pour contrôler l'affichage des informations aussi ? du style si rien est sélectionné, tu m'affiches tous les éléments, si un élément de la liste déroulante x est select, tu m'affiches avec ce tri etc ?
merci beaucoup à celui qui prendra le temps de me lire et de me répondre !![]()
Partager