Salut à tous,

J'ai mi en place deux listes déroulantes liées grâce à de l'Ajax.

Malheureusement j'ai un souci.

J'ai une première liste déroulante qui correspond à une entité TypeTache qui peut prendre la valeur Compte, Contact, ou Piste, et une seconde qui charge les données de la table Compte, Contact ou Piste précédemment choisie dans la première liste.

Pour la seconde liste déroulante, je la déclare comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
    	->add('source', 'entity', array('class' => "IcmeGrcBundle:Compte", 'property' => 'societe', 'empty_value' => ''))
Donc comme je l'ai dis cette liste, suivant le choix de la première liste, peut contenir soit les données de l'entité Compte, Contact ou Piste.

Le problème est que comme je la déclare en tant que Compte, lorsque je lui soumet un contact ou une piste, mon formulaire ne veut pas prendre la valeur et s'arrête au niveau du isValid(), en m'indiquant "Cette valeur n'est pas valide".

Voici mon action dans 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
<?php
public function remplirSourceAction()
	{
		$request = $this->getRequest();
 
		if($request->isXmlHttpRequest()) // pour vérifier la présence d'une requete Ajax
		{
			$idSource = $request->request->get('id');
 
			if ($idSource != null)
			{
				if($idSource == 1) // compte
				{
					$comptes = $this->getDoctrine()
					->getEntityManager()
					->getRepository('IcmeGrcBundle:Compte')->findAll();
					//->findBy(array('compte' => $idSource));
 
					$tabComptes = array();
					$i = 0;
					foreach($comptes as $c) // pour transformer la réponse à ta requete en tableau qui replira le select2
					{
						$tabComptes[$i]['id'] = $c->getId();
						$tabComptes[$i]['nom'] = $c->getSociete()->getNom();
						$i++;
					}
 
					$response = new Response();
					$comptes = json_encode($tabComptes);
					$response->headers->set('Content-Type', 'application/json');
					$response->setContent($comptes);
					return $response;
				}
				if($idSource == 2) // contact
				{
					$contacts = $this->getDoctrine()
					->getEntityManager()
					->getRepository('IcmeGrcBundle:Contact')->findAll();
					//->findBy(array('compte' => $idSource));
					$tabContacts = array();
					$i = 0;
					foreach($contacts as $c) // pour transformer la réponse à ta requete en tableau qui replira le select2
					{
						$tabContacts[$i]['id'] = $c->getId();
						$tabContacts[$i]['nom'] = $c->getPersonne()->getNom();
						$tabContacts[$i]['prenom'] = $c->getPersonne()->getPrenom();
						$i++;
					}
					$response = new Response();
					$contacts = json_encode($tabContacts);//array('contacts' => $contacts));
					$response->headers->set('Content-Type', 'application/json');
					$response->setContent($contacts);
					return $response;
				}
				if($idSource == 4) // piste
				{
					$pistes = $this->getDoctrine()
					->getEntityManager()
					->getRepository('IcmeGrcBundle:Piste')->findAll();
					//->findBy(array('compte' => $idSource));
					$tabPistes = array();
					$i = 0;
					foreach($pistes as $p) // pour transformer la réponse à ta requete en tableau qui replira le select2
					{
						$tabPistes[$i]['id'] = $p->getId();
						$tabPistes[$i]['nom'] = $p->getPersonne()->getNom();
						$tabPistes[$i]['prenom'] = $p->getPersonne()->getPrenom();
						$i++;
					}
					$response = new Response();
					$pistes = json_encode($tabPistes);//array('contacts' => $contacts));
					$response->headers->set('Content-Type', 'application/json');
					$response->setContent($pistes);
					return $response;
				}
			}
		}
 
		return new Response("Erreur.");
	}
Merci beaucoup.