Bonjour,
Je débute avec Symfony2 et j'utilise la libraire FOSUserBundle pour la gestion de mon espace membre.
J'ai modifié mon formulaire d'inscription en ajoutant deux champs de type select ( pays et région). Je voudrais qu'en sélectionnant le pays que la liste région soit celle du pays sélectionné.
J'utilise ajax pour remplir ma liste de régions, cependant quand je sélectionne un pays et que j'affiche sa valeur, elle est indéfinie.
Quelqu'un pourrait-il m'aider à résoudre ce problème. Ci-dessous mes différents codes.
Le formulaire twig:
Le code javascript:
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 {% block javascripts %} <script src="{{ asset('bootstrap-3.0.3/userbundle/js/fillRegistration.js') }}" type="application/javascript"></script> {% endblock %} <form "action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="fos_user_registration_register form-horizontal" role="form"> <div class="col-md-3 white-background"></div> <div class="col-md-6"> <div class="row"> <div class="form-group"> <label class="col-sm-5 control-label">{{ form_label(form.country) }}</label> <div class="col-sm-7"> {{ form_widget(form.country, {'attr': { 'class': 'form-control', 'onChange': 'fillRegion();', 'id': 'country'}}) }} </div> </div> <div class="form-group"> <label class="col-sm-5 control-label">{{ form_label(form.region) }}</label> <div class="col-sm-7"> {{ form_widget(form.region, {'attr': {'class': 'form-control'}}) }} </div> </div> </div> <div class="form-group"> <div class=" col-sm-12 align-center-button"> <button type="submit" id="_submit" name="_submit" class="btn btn-btn btn-primary">{{ 'registration.submit'|trans({}, 'FOSUserBundle') }}</button> </div> </div> </div> <div class="col-md-3 white-background"></div>
Le code du 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 function fillRegion() { var id_country = ""; alert(' avant ===> '+id_country); id_country = $("select.country option:selected").val(); alert(' après ===> '+id_country); $.ajax({ url: "{{ path('pme_registration_fill_region }}", type: 'POST', data: {'id': id_country}, dataType: 'json', success: function(json){ $('#region').html(''); $.each(json, function(index, value) { $('#region').append('<option value="'+ value.regCode +'">'+ value.regName +'</option>'); }); } }); }
la route vers l'appel ajax:
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 public function fillRegionAction() { $request = $this->getRequest(); $em = $this->getDoctrine()->getEntityManager(); if($request->isXmlHttpRequest()) // pour vérifier la présence d'une requete Ajax { $id = ''; $id = $request->get('id'); if ($id != '') { $tesObjets = $em->getRepository('PmeUserBundle:Countries') ->find($id); // qui retourne une collection d'objet je présume $tabObjet = array(); $i = 0; foreach($tesObjets as $tonObjet) // pour transformer la réponse à ta requete en tableau qui replira le select2 { $tabObjet[$i]['regCode'] = $tonObjet->getAlpha2(); $tabObjet[$i]['regName'] = $tonObjet->getLangFr(); } $response = new Response(); $data = json_encode($tabObjet); // c'est pour formater la réponse de la requete en format que jquery va comprendre $response->headers->set('Content-Type', 'application/json'); $response->setContent($data); return $response; } } return new Response('Erreur'); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 pme_registration_fill_region: pattern: /fillRegion defaults: { _controller: PmeUserBundle:UserBundle:fillRegion} requirements: _method: POST
Merci d'avance pour votre aide
Partager