Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > Symfony2
Symfony2 Forum d'entraide sur le framework PHP Symfony2.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/02/2013, 13h05   #1
cescu
Membre du Club
 
Inscription : février 2004
Messages : 199
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 199
Points : 40
Points : 40
Par défaut [Form] Formulaire compliqué

Bonjour,
j'aurais besoin d'un conseil pour faire une chose que je trouve compliquée.
J'aimerais à partir d'un ufr choisi afficher les diplomes dans diplome qui sont liés à cet ufr.

Tout d'abord j'explique ce que j'arrive à faire :
dans mon fichierType :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
->add('ufr','entity',array('query_builder'=> function(EntityRepository $er) { return $er->createQueryBuilder('u')->orderBy('u.nom', 'ASC');},
									   'class'        =>'UdcDiplomeBundle:Ufr',
									   'property'     =>'nom',				  
				  ))
 
			->add('diplome','entity', array(
						'class'        =>'UdcDiplomeBundle:Diplome',
						'property'     =>'nomDiplome',
						'empty_value' => '***',
						'query_builder'=> function(EntityRepository $er)  { 
							return $er->createQueryBuilder('diplome')    
									  ->join('diplome.ufr','ufr')
									  ->where('ufr.id = :id')
							          ->setParameter('id', 3);
						}
				  ));
Ici j'ai fixé les diplomes liés à l'ufr dont l'id = 3.

Ce que j'aimerais c'est paramétrer l'id en fonction d'une variable id_ufr de l'ufr choisi. J'ai essayé beaucoup de solutions mais je n'y arrive pas.

Merci
cescu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 14h04   #2
anta_res
Membre habitué
 
Avatar de anta_res
 
Homme Julien Campos
Développeur Web
Inscription : mai 2006
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Julien Campos
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 75
Points : 138
Points : 138
Il va falloir que tu passe par de l'ajax pour recharger juste le champ qui t’intéresse lors du changement de la valeur de ton champ "ufr"
anta_res est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 14h35   #3
cescu
Membre du Club
 
Inscription : février 2004
Messages : 199
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 199
Points : 40
Points : 40
merci pour ta réponse mais je voudrais deja qu'au premier affichage là où j'ai :

->setParameter('id', 3); je puisse paramétrer le 3. Puis apres chaque changement d'ufr utiliser ajax. Tu peux m'aider sur ce point? Merci
cescu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 14h54   #4
anta_res
Membre habitué
 
Avatar de anta_res
 
Homme Julien Campos
Développeur Web
Inscription : mai 2006
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Julien Campos
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 75
Points : 138
Points : 138
Bin pour ça il te suffit d'instancier ton formulaire sur un objet dont le champ diplôme est à 3.

Code :
1
2
$objet = new Objet();
$objet->setDiplome(3);
et tu passe $objet a ton formType
anta_res est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 15h24   #5
cescu
Membre du Club
 
Inscription : février 2004
Messages : 199
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 199
Points : 40
Points : 40
je comprends que je puisse initialiser ma liste avec une certaine valeur puisque je l'ai fait et je te remercie :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
private $idUfr;
 
...
 
public function __construct() {
	 ...
	...
            ...
		$this->idUfr = 1;
	}
 
 
->add('diplome','entity', array(
						'class'        =>'UdcDiplomeBundle:Diplome',
						'property'     =>'nomDiplome',
						'empty_value' => '***',
						'query_builder'=> function(EntityRepository $er)  { 
							return $er->createQueryBuilder('diplome')    
									  ->join('diplome.ufr','ufr')
									  ->where('ufr.id = :id')
							          ->setParameter('id', $this->idUfr);
						}
				  ));
mais ce que je ne comprends pas c'est qu'une fois l'initialisation du formulaire faite et une fois que je selectionne mon ufr comment je fais dans mon controlleur juste apres :

Code :
1
2
 
if($request->isXmlHttpRequest()) {
je sais que là je dois retourner quelque chose du genre

Code :
1
2
 
$response = new Response(json_encode(
qu'ajax devra traiter.

Admettons que je passe le numéro d'ufr. Mais peux tu m'expliquer comment j'affecte ma nouvelle valeur dans ->setParameter('id', $this->idUfr) et surtout comment je réaffiche diplome.
N'y a t'il pas un moyen pour faire ça dans le fichierType?

Merci encore !!!
cescu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 15h38   #6
anta_res
Membre habitué
 
Avatar de anta_res
 
Homme Julien Campos
Développeur Web
Inscription : mai 2006
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Julien Campos
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 75
Points : 138
Points : 138
Non je ne crois pas que cela puisse ce faire dans le fichier FormType car celui ci fonctionne uniquement en mode synchrone.

La seule chose que tu puisse faire c'est modifier l'affichage de ton formulaire en fonction de certains paramètres lors de son chargement en utilisant des Form Events http://symfony.com/doc/current/cookb...ification.html

Mais si tu veut le faire au changement d'un de tes champs tu es obligé de passer par de l'ajax. Il faut que ta méthode Ajax retourne le code correspondant à ton champ "diplôme" mis à jour avec la nouvelle valeur.
anta_res est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 10h08   #7
matlow
Membre actif
 
Homme
Développeur Web
Inscription : octobre 2009
Messages : 107
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Vietnam

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2009
Messages : 107
Points : 161
Points : 161
Salut !

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
private $idUfr;
 
public function __construct() {
		$this->idUfr = 1;
	}
 
->add('diplome','entity', array(
						'class'        =>'UdcDiplomeBundle:Diplome',
						'property'     =>'nomDiplome',
						'empty_value' => '***',
						'query_builder'=> function(EntityRepository $er)  { 
							return $er->createQueryBuilder('diplome')    
									  ->join('diplome.ufr','ufr')
									  ->where('ufr.id = :id')
							          ->setParameter('id', $this->idUfr);
						}
				  ));

Ca fonctionne ?

Code :
1
2
 
->setParameter('id', $this->idUfr);
Perso je passerai les idUfr dans le constructeur de fichierType

Code :
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
 
 
class fichierType{
 
private $idUfr;
 
public function __construct($idUfr = null) {
	 if($idUfr !== null) $this->idUfr = $idUfr;
	}
}
 
    public function buildForm(FormBuilder $builder, array $options)
    {
$idUFr = $this->$idUfr;
        $builder->add('diplome','entity', array(
						'class'        =>'UdcDiplomeBundle:Diplome',
						'property'     =>'nomDiplome',
						'empty_value' => '***',
						'query_builder'=> function(EntityRepository $er) use ($idUfr)   { 
							return $er->createQueryBuilder('diplome')    
									  ->join('diplome.ufr','ufr')
									  ->where('ufr.id = :$idUser')
							          ->setParameter('id', $idUFr);
						}
				  ));
Citation:
Envoyé par cescu Voir le message
Admettons que je passe le numéro d'ufr. Mais peux tu m'expliquer comment j'affecte ma nouvelle valeur dans ->setParameter('id', $this->idUfr) et surtout comment je réaffiche diplome.
et dans le controlleur :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
class Controlleur {
 
public function monactionAction(){
...
 
 if($request->isXmlHttpRequest()) {
    $return = new fichierType($idUfr)
    $response = new Response(json_encode($return))
 }
}
Dans la vue tu recharge le conteneur du formulaire avec la reponse json
matlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 11h14   #8
cescu
Membre du Club
 
Inscription : février 2004
Messages : 199
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 199
Points : 40
Points : 40
Je viens de tester ce que tu m'as dit mais j'ai quelques problèmes de compréhension:

Code :
1
2
3
4
5
6
7
 
if($request->isXmlHttpRequest()) {	
   $idUFR = $request->request->get('idUFR');				
   $return = new EtudiantType($idUFR);
   $response = new Response(json_encode($return));
  return $response;
}
dans mon formulaire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
   <script type="text/javascript">
       $('#monUFR select').change(function() {  
            var idUFR = $('#monUFR select').val();  
            var ufrSelected = $('#monUFR select').text();  
            var diplomeSelected = '';
            $.ajax({
                type: 'POST',
                data: {'idUFR' : idUFR},   
                dataType: 'json',                  
                url:  '{{ path('UdcDiplomeBundle_etudiant_ajouter') }}',       
                success: function(response) {
                  alert(response);
               }
            });
            return false;
          });
j'ai fait un alert parce que tu me dis :
Citation:
Dans la vue tu recharge le conteneur du formulaire avec la reponse json
et je ne sais pas vraiment quoi traiter. Avec cet alert j'ai : [object Object]

Merci
cescu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 13h29   #9
matlow
Membre actif
 
Homme
Développeur Web
Inscription : octobre 2009
Messages : 107
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Vietnam

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2009
Messages : 107
Points : 161
Points : 161
Re,

j'ai ptet mal saisi ta demande...Peux-tu donner ton arbo rapide du bundle (mvc et formType), là je suis un peu perdu..
Sur le 1er post tu annonce un fichierType et la c'est un etudiantType.

a+
matlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 13h42   #10
cescu
Membre du Club
 
Inscription : février 2004
Messages : 199
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 199
Points : 40
Points : 40
oui parce qu'en fait fichier c'était pour rester
pour rester général. Mais fait c'est EtudiantType Donc aucun probleme
cescu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 21h14   #11
cescu
Membre du Club
 
Inscription : février 2004
Messages : 199
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 199
Points : 40
Points : 40
je vais t'expliquer ce que j'ai fait et qui marche en partie.

Dans mon EtudiantController :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
if($request->isXmlHttpRequest()) {	
   $idUFR = $request->request->get('idUFR');
   $em = $this->getDoctrine()
                   ->getEntityManager();     
   $ufrChoisi = $em->getRepository('UdcDiplomeBundle:Ufr')
                         ->find($idUFR);
   $diplomesDeLufrChoisi = $ufrChoisi->getDiplomes();
   $i = 0;
   foreach ($diplomesDeLufrChoisi as $dip) {
      $mesDiplomes[$i] = $dip->getNomDiplome();
      $i = $i + 1;
    }	
   $response = new Response(json_encode($mesDiplomes));
   $response->headers->set('Content-Type', 'application/json');
   return $response;
avec EtudiantType :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
->add('ufr','entity',array('query_builder'=> function(EntityRepository $er) { return $er->createQueryBuilder('u')->orderBy('u.nom', 'ASC');},
									   'class'        =>'UdcDiplomeBundle:Ufr',
									   'property'     =>'nom',				  
				  ))
 
			->add('diplome','entity', array(
						'class'        =>'UdcDiplomeBundle:Diplome',
						'property'     =>'nomDiplome',
						'empty_value' => '***',
						'query_builder'=> function(EntityRepository $er)  { 
							return $er->createQueryBuilder('diplome')    
									  ->join('diplome.ufr','ufr')
									  ->where('ufr.id = :id')
							          ->setParameter('id', $this->idUfr);
						}
				  ));
et mon formulaire :

Code :
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
 
 <div id="monUFR"  class="fomForm select" >
        {{ form_label(form.ufr, "U.F.R.") }}
        {{ form_errors(form.ufr) }}
        {{ form_widget(form.ufr) }}
      </div>
 
      <div id="mesDiplomes">
        {{ form_label (form.diplome, "Diplomes") }}
        {{ form_errors(form.diplome) }}
        {{ form_widget(form.diplome) }}    
      </div>     
 
      {{ form_rest(form) }}  
   <p>
      <button type="submit"  class="btn btn-primary">Enregistrer</button> 
      <button type="reset"   class="btn btn-primary">Annuler</button>  
   </p>
 
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
   <script type="text/javascript">
 
			$('#monUFR select').change(function() {  
            var idUFR = $('#monUFR select').val();  
            var ufrSelected = $('#monUFR select').text();  
            var diplomeSelected = '';
            $.ajax({
                type: 'POST',
                data: {'idUFR' : idUFR},   
                dataType: 'json',                  
                url:  '{{ path('UdcDiplomeBundle_etudiant_ajouter') }}',       
                success: function(response) {
                  $('#mesDiplomes select').find("option").remove();
                  $.each(response, function(i, item) {
                    $('#mesDiplomes select').append(new Option(item, i));
                  });
               }
            });
            return false;
          });
Alors quelques explications. la $response est bien reçue dans la partie ajax de mon formulaire. La liste diplome est bien alimentée des diplomes attendus en focntion de l'ufr selectionné. Mais lorsque je valide mon formulaire dans ma table etudiant j'ai quelque chose que je n'attends pas et qui fait je me trouve dans une voie sans issue.

Dans mon entité Ufr :

Code :
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
 
class Etudiant
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
 
...
...
...
/**
     * @ORM\ManyToOne(targetEntity="Udc\DiplomeBundle\Entity\Diplome")  
	 * @ORM\JoinColumn(nullable=false)
     */
     private $diplome;
 
	 /**
     * @ORM\ManyToOne(targetEntity="Udc\DiplomeBundle\Entity\Ufr", inversedBy="diplomes")  
	 * @ORM\JoinColumn(nullable=false)
     */
     private $ufr;
(je sais qu'avec Doctrine on ne doit pas parler de table mais pour bien expliquer ce qui me bloque je dois le faire) le champ diplome_id qui est géré par doctrine et qui fait le lien avec $diplome ne récupère pas l'id du diplome selectionné mais l'indice du select. Je m'explique : j'ai dans ma table diplome 10 diplomes. Apres avoir choisi un ufr les diplomes relié à cet ufr sont au nombre de 3. J'en choisi un le dernier. Et bien après validation de mon formulaire le champ diplome_id va prendre la valeur 2 et non pas l'id du diplome. PAr contre si dans ->where('ufr.id = :id') à l'initialisation du formulaire je passe l'id de l'ufr j'ai la meme liste de diplome. PAr contre a la validation j'ai le bon id de diplome dans diplome_id.
J'en viens a penser que dans le controlleur dans $response je dois impérativement passer un objet !!!
dans la boucle du controlleur j'ai meme fait un array

foreach ($diplomesDeLufrChoisi as $dip) {

$mesDiplomes[$i][1] = $dip->getNomDiplome();
$i = $i + 1;
}
cescu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 21h15   #12
cescu
Membre du Club
 
Inscription : février 2004
Messages : 199
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 199
Points : 40
Points : 40
je vais t'expliquer ce que j'ai fait et qui marche en partie.

Dans mon EtudiantController :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
if($request->isXmlHttpRequest()) {	
   $idUFR = $request->request->get('idUFR');
   $em = $this->getDoctrine()
                   ->getEntityManager();     
   $ufrChoisi = $em->getRepository('UdcDiplomeBundle:Ufr')
                         ->find($idUFR);
   $diplomesDeLufrChoisi = $ufrChoisi->getDiplomes();
   $i = 0;
   foreach ($diplomesDeLufrChoisi as $dip) {
      $mesDiplomes[$i] = $dip->getNomDiplome();
      $i = $i + 1;
    }	
   $response = new Response(json_encode($mesDiplomes));
   $response->headers->set('Content-Type', 'application/json');
   return $response;
avec EtudiantType :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
->add('ufr','entity',array('query_builder'=> function(EntityRepository $er) { return $er->createQueryBuilder('u')->orderBy('u.nom', 'ASC');},
									   'class'        =>'UdcDiplomeBundle:Ufr',
									   'property'     =>'nom',				  
				  ))
 
			->add('diplome','entity', array(
						'class'        =>'UdcDiplomeBundle:Diplome',
						'property'     =>'nomDiplome',
						'empty_value' => '***',
						'query_builder'=> function(EntityRepository $er)  { 
							return $er->createQueryBuilder('diplome')    
									  ->join('diplome.ufr','ufr')
									  ->where('ufr.id = :id')
							          ->setParameter('id', $this->idUfr);
						}
				  ));
et mon formulaire :

Code :
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
 
 <div id="monUFR"  class="fomForm select" >
        {{ form_label(form.ufr, "U.F.R.") }}
        {{ form_errors(form.ufr) }}
        {{ form_widget(form.ufr) }}
      </div>
 
      <div id="mesDiplomes">
        {{ form_label (form.diplome, "Diplomes") }}
        {{ form_errors(form.diplome) }}
        {{ form_widget(form.diplome) }}    
      </div>     
 
      {{ form_rest(form) }}  
   <p>
      <button type="submit"  class="btn btn-primary">Enregistrer</button> 
      <button type="reset"   class="btn btn-primary">Annuler</button>  
   </p>
 
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
   <script type="text/javascript">
 
			$('#monUFR select').change(function() {  
            var idUFR = $('#monUFR select').val();  
            var ufrSelected = $('#monUFR select').text();  
            var diplomeSelected = '';
            $.ajax({
                type: 'POST',
                data: {'idUFR' : idUFR},   
                dataType: 'json',                  
                url:  '{{ path('UdcDiplomeBundle_etudiant_ajouter') }}',       
                success: function(response) {
                  $('#mesDiplomes select').find("option").remove();
                  $.each(response, function(i, item) {
                    $('#mesDiplomes select').append(new Option(item, i));
                  });
               }
            });
            return false;
          });
Alors quelques explications. la $response est bien reçue dans la partie ajax de mon formulaire. La liste diplome est bien alimentée des diplomes attendus en focntion de l'ufr selectionné. Mais lorsque je valide mon formulaire dans ma table etudiant j'ai quelque chose que je n'attends pas et qui fait je me trouve dans une voie sans issue.

Dans mon entité Ufr :

Code :
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
 
class Etudiant
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
 
...
...
...
/**
     * @ORM\ManyToOne(targetEntity="Udc\DiplomeBundle\Entity\Diplome")  
	 * @ORM\JoinColumn(nullable=false)
     */
     private $diplome;
 
	 /**
     * @ORM\ManyToOne(targetEntity="Udc\DiplomeBundle\Entity\Ufr", inversedBy="diplomes")  
	 * @ORM\JoinColumn(nullable=false)
     */
     private $ufr;
(je sais qu'avec Doctrine on ne doit pas parler de table mais pour bien expliquer ce qui me bloque je dois le faire) le champ diplome_id qui est géré par doctrine et qui fait le lien avec $diplome ne récupère pas l'id du diplome selectionné mais l'indice du select. Je m'explique : j'ai dans ma table diplome 10 diplomes. Apres avoir choisi un ufr les diplomes relié à cet ufr sont au nombre de 3. J'en choisi un le dernier. Et bien après validation de mon formulaire le champ diplome_id va prendre la valeur 2 et non pas l'id du diplome. PAr contre si dans ->where('ufr.id = :id') à l'initialisation du formulaire je passe l'id de l'ufr j'ai la meme liste de diplome. PAr contre a la validation j'ai le bon id de diplome dans diplome_id.
J'en viens a penser que dans le controlleur dans $response je dois impérativement passer un objet !!!
dans la boucle du controlleur j'ai meme fait un array

Code :
1
2
3
4
5
foreach ($diplomesDeLufrChoisi as $dip) {
   $mesDiplomes[$i][0] = $dip->getId();
  $mesDiplomes[$i][1] = $dip->getNomDiplome();
  $i = $i + 1; 
}
pour envoyer le bon id mais ça ne marche pas non plus.
Voila si tu peux encore m'aider ...
A+
cescu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2013, 10h33   #13
cescu
Membre du Club
 
Inscription : février 2004
Messages : 199
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 199
Points : 40
Points : 40
ici j'ai essayé d'une autre façon :

dans le controlleur :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
$request = $this->get('request');
		if($request->isXmlHttpRequest()) {	
			$idUFR = $request->request->get('idUFR');
 
			$em = $this->getDoctrine()
			  	       ->getEntityManager();     
 
			$ufrChoisi = $em->getRepository('UdcDiplomeBundle:Ufr')
							->find($idUFR);
 
			$diplomesDeLufrChoisi = $ufrChoisi->getDiplomes();			
 
			$html = '';
			foreach ($diplomesDeLufrChoisi as $dip) {
				$html = $html . sprintf("<option value=\"%d\">%s</option>",$dip->getId(), $dip->getNomDiplome());
			}			
			return new Response($html);			
        }
Code :
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
 
<div id="monUFR"  class="fomForm select" >
        {{ form_label(form.ufr, "U.F.R.") }}
        {{ form_errors(form.ufr) }}
        {{ form_widget(form.ufr) }}
      </div>
 
      <div >
        {{ form_label (form.diplome, "Diplomes") }}
        {{ form_errors(form.diplome) }}
        <select id="mesDiplomes"> {{ form_widget(form.diplome) }} </select>
      </div>        
 
      {{ form_rest(form) }}  
   <p>
      <button type="submit"  class="btn btn-primary">Enregistrer</button> 
      <button type="reset"   class="btn btn-primary">Annuler</button>  
   </p>
 
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
   <script type="text/javascript">
 
			$('#monUFR select').change(function() {  
            var idUFR = $('#monUFR select').val();    
            $.ajax({
                type: 'POST',
                data: {'idUFR' : idUFR},           
                url:  '{{ path('UdcDiplomeBundle_etudiant_ajouter') }}',       
                success: function(response) {
                  $('#mesDiplomes').html(response).show();
               }
            });
            return false;
          });	
 
 
   </script>
quand je change d'ufr j'ai bien dans diplome les diplomes attendus. Par contre à la validation j'ai le message :
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'diplome_id' cannot be null

Ici je n'ai pas comme dans l'exemple précédent le remplacement de diplome_id par le selectId mais diplome_id = null alors qu'il me semblait lui avoir passé le
id du diplome avec $html = $html . sprintf("<option value=\"%d\">%s</option>",$dip->getId(), $dip->getNomDiplome());

A+
cescu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2013, 16h57   #14
matlow
Membre actif
 
Homme
Développeur Web
Inscription : octobre 2009
Messages : 107
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Vietnam

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2009
Messages : 107
Points : 161
Points : 161
Merci pour les explications

Essaye comme je t'ai dit plus haut de passer les idUfr dans le constructeur du fichierType (ou celui concerné) et les utiliser dans le query_builder comme parametre via use($idUfr)

Code :
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
 
 
class fichierType{
 
private $idUfr;
 
public function __construct($idUfr = null) {
	 if($idUfr !== null) $this->idUfr = $idUfr;
	}
}
 
    public function buildForm(FormBuilder $builder, array $options)
    {
$idUFr = $this->$idUfr;
        $builder->add('diplome','entity', array(
						'class'        =>'UdcDiplomeBundle:Diplome',
						'property'     =>'nomDiplome',
						'empty_value' => '***',
						'query_builder'=> function(EntityRepository $er) use ($idUfr)   { 
							return $er->createQueryBuilder('diplome')    
									  ->join('diplome.ufr','ufr')
									  ->where('ufr.id = :$idUser')
							          ->setParameter('id', $idUFr);
						}
				  ));
}
matlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2013, 22h45   #15
cescu
Membre du Club
 
Inscription : février 2004
Messages : 199
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 199
Points : 40
Points : 40
Salut Matlow,

ce que tu dis je l'ai fait et ca marche llorsque je charge mon formulaire la premiere fois parce que dans le fichierType il y a un requete qui est faite et l'objet resultat de la query est passee directement au formulaire. Par contre lorsque je choisis un ufr et je veux renvoyer le resultat de la requete a mon fichier twig je n'ai pas de moyen d'envoyer un objet et pas de moyen de l'interpreter avec jquery. A+++
cescu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h52.


 
 
 
 
Partenaires

Hébergement Web