Bonjour,
Je continue mon apprentissage en symfony2,
Je cherche à ajouter une fonctionnalité de recherche, en lisant certains exemples j'ai construit un exemple de test:
L'entité Product:
Le Type:
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 .......... /** * @ORM\Entity */ class Product { /** * @ORM\GeneratedValue * @ORM\Id * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string",length=255) * @Assert\NotBlank() * @Assert\MinLength(2) */ private $name; /** * @ORM\ManyToOne(targetEntity="Vendor") * @Assert\NotBlank() */ private $vendor; ........ }
Le controleur:
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 ........ class ProductType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('vendor','entity', array( 'class' => 'MySite\AnnonceBundle\Entity\Vendor', 'property' => 'name', 'multiple' => false, 'required' => false, 'label' => 'Vendor' )) ->add('name','entity', array( 'class' => 'MySite\AnnonceBundle\Entity\Product', 'property' => 'name', 'multiple' => false, 'required' => false, 'label' => 'Product' )); } public function getName() { return 'product'; // Name of the form } public function getDefaultOptions(array $options) { return array('data_class' => 'MySite\AnnonceBundle\Entity\Product',); } } ......
et la vue:
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 ........... public function rempliProductAction() { $request = $this->getRequest(); if($request->isXmlHttpRequest()) // pour vérifier la présence d'une requete Ajax { $idVendor = $request->request->get('id'); if ($idVendor != null) { $product = $this->getDoctrine() ->getEntityManager() ->getRepository('MySiteAnnonceBundle:Product') ->getProducts($idVendor); $response = new Response(); $product = json_encode(array('product' => $product)); $response->headers->set('Content-Type', 'application/json'); $response->setContent($product); return $response; } } return new Response("Nonnn ...."); } public function getProducts($id) //Using { $queryBuilder = $this->_em->createQueryBuilder(); $queryBuilder->select('p') ->from('MySiteAnnonceBundle:Product', 'p') ->where('p.vendor = :vendor') ->setParameter('vendor', $id) ->orderBy('p.name', 'ASC') ->groupBy('p.name'); return $queryBuilder->getQuery() ->getArrayResult(); } ...............
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 <html> <head> <script type="text/javascript" language="javascript"> function remplirProductSearch() { $(".ChoiceVendorSearch").change(function() { var vendor = $("select.ChoiceVendorSearch option:selected").val(); var DATA = 'id=' + vendor; $.ajax({ type: "POST", dataType: 'json', url: "/Symfony2_1_7/web/app_dev.php/mysite/gestion/product/rempliProduct", data: DATA, success: function(msg) { $.each(msg, function(index, product) { $('.ChoiceProductSearch').html(''); $('.ChoiceProductSearch').append('<option value="'+ product.id +'" selected="selected"> '+ product[0].name +' </option>'); }); } }); }); } </script> </head> <body> {{ form_widget(form.vendor, { 'attr': {'class': 'ChoiceVendorAdd'} }) }} {{ form_widget(form.name, { 'attr': {'class': 'ChoiceProductAdd'} }) }} </body> </html>
J'ai ajouté aussi des données de test,
Maintenant lorsque je choisie un vendeur (liste déroulante1) , rien ne change cote produit (liste déroulante2); j'ai accès à tous les produits.
Firebug m'indique aucune erreur,
Merci d'avance.
Partager