IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Ajax listes déroulantes liées [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut Ajax listes déroulantes liées
    Bonjour,

    Je débute avec Symfony2. Par de l'Ajax, je cherche à mettre à jour une liste en fonction du choix fait dans une précédente : plus explicitement, lorsque l'utilisateur choisi, dans une liste, un département, je voudrais que, dans la liste 'Pays', ce soit le bon pays qui soit sélectionné.

    Je suis obligé d'avoir une liste 'Pays' car le champs 'Département' n'est pas obligatoire (tous les pays n'en n'ont pas), tandis que le champs 'Pays' l'est.

    Voici mon formulaire :

    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
    <?php
     
    namespace Hotels\GestionAnnoncesBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
     
    class ProvinceType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                ->add('nom')
                ->add('departement')
                ->add('pays')
            ;
        }
     
        public function getName()
        {
            return 'hotels_gestionannoncesbundle_provincetype';
        }
    }
    Voici ma 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
    <h1>Province creation</h1>
     
    <form action="{{ path('province_create') }}" method="post" {{ form_enctype(form) }}>
        {{ form_widget(form) }}
        <p>
            <button type="submit">Create</button>
        </p>
    </form>
     
    <ul class="record_actions">
        <li>
            <a href="{{ path('province') }}">
                Back to the list
            </a>
        </li>
    </ul>
    Merci d'avance pour votre aide.

  2. #2
    Membre régulier
    Profil pro
    IED Web
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : IED Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 90
    Points
    90
    Par défaut
    http://blog.azancadas.com/2011/08/sy...iven-approach/

    Solution qlq peu corsée pour un débutant mais bon.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Je ne vois pas pas où est la difficulté si tu as déjà fait des requêtes Ajax. Ce n'est pas un problème de Symfony2, mais plutot de Javascript si tu ne sais pas du tout faire.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    J'avais l'habitude de travailler avec de l'Ajax, hors Symfony. Je mettais un 'onBlur' sur le premier 'select', j'insérais le second 'select' dans un 'div' et ensuite, via de l'Ajax, je mettais à jour ledit 'div'.

    Dans Symfony, apparemment, ça ne fonctionne pas de la même manière. Je ne sais pas où placer mon 'onBlur' et comment mettre à jour le formulaire alors que je n'ai pas de 'div'.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par dubitoph Voir le message
    Bonjour,

    J'avais l'habitude de travailler avec de l'Ajax, hors Symfony. Je mettais un 'onBlur' sur le premier 'select', j'insérais le second 'select' dans un 'div' et ensuite, via de l'Ajax, je mettais à jour ledit 'div'.

    Dans Symfony, apparemment, ça ne fonctionne pas de la même manière. Je ne sais pas où placer mon 'onBlur' et comment mettre à jour le formulaire alors que je n'ai pas de 'div'.
    Bonjour,

    tu peux mettre tous les attributs que vous voulez dans le formtype :

    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
    <?php
     
    namespace Hotels\GestionAnnoncesBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
     
    class ProvinceType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                ->add('nom')
                ->add('departement')
                ->add('pays','entity', array('class'=>votre entity,
                   'attr'=>array('onblur'=>'votre fonction'))
            ;
        }
     
        public function getName()
        {
            return 'hotels_gestionannoncesbundle_provincetype';
        }
    }

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Ok, merci beaucoup pour l'information. Dans ce cas, ce serait plutôt :

    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
    <?php
     
    namespace Hotels\GestionAnnoncesBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
     
    class ProvinceType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                ->add('nom')
                ->add('departement' , 'entity', array('class'=>'Departement',
                   'attr'=>array('onblur'=>'fonction de mise à jour'))
                ->add('pays')
            ;
        }
     
        public function getName()
        {
            return 'hotels_gestionannoncesbundle_provincetype';
        }
    }
    Mais comment indiquer, dans mon javascript, que c'est le 'select' 'Pays' qui doit être mis à jour? Avant, par exemple, je faisais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(xhrMajLoc.readyState == 4 && xhrMajLoc.status == 200)
         {
          document.getElementById('divLocalites').innerHTML = xhrMajLoc.responseText;
         }

  7. #7
    Membre régulier
    Profil pro
    IED Web
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : IED Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 90
    Points
    90
    Par défaut
    En fonction du getName donné à ton formulaire, ton select "pays" devrai avoir l'id "hotels_gestionannoncesbundle_provincetype_pays", non ?

    Et pour expliquer l'apport de mon précédent lien avec la gestion des events listeners du formulaire en comparaison d'un formulaire classique comme dans ton bout de code :
    Dans ta version, un contrôle de la bonne validité des valeurs postées par l'utilisateur sera effectuée mais pas que l'association département/pays est correcte. Donc un utilisateur peut outrepasser ton javascript et saisir des données erronées.

    Après pour un site basique, tu n'as peut-être pas besoins de te complexifier la tâche...

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Merci beaucoup pour ton aide.

    Concernant ton précédent lien, j'ai beaucoup de difficultés à l'adapter à ma situation. Notemment, j'ai une erreur qui se produit au niveau des listerners.

    De fait, dans mon cas, le lien entre la province et le département riquerait d'être erronné. Je vais donc peut-être quand même tenter de persévérer dans l'étude de ton lien.

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Voilà, je continue a essayer la méthode proposée par bendede.

    Voici mon script :

    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
    <?php   
     
    namespace Hotels\GestionAnnoncesBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
     
    class ProvinceType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            /*$builder
                ->add('nom')
                ->add('departement')
                ->add('pays')
            ;*/
     
            $builder
                ->add('nom')
                ->add('departement');
     
            $factory = $builder->getFormFactory();
     
            $refreshPays = function ($form, $departement) use ($factory) 
            {             
             $form->add($factory->createNamed('entity','pays',null, array(                 
               'class' => 'HotelsGestionAnnoncesBundle\Entity\Pays',                 
               'property' => 'name',                 
               'label' => 'Pays',                 
               'query_builder' => function (EntityRepository $repository) use ($departement) 
                                  {                                        
                                   $qb = $repository->createQueryBuilder('pays');                                          
                                   $qb = $qb->where('pays.id = departement.pays');
     
                                   return $qb;                                    
                                  }                  
              )));         
          };
     
          $builder->addEventListener(FormEvents::PRE_SET_DATA, function (DataEvent $event) use ($refreshPays) 
          {             
           $form = $event->getForm();             
           $data = $event->getData();               
     
           if($data == null)                
            $refreshLocality($form, null); //As of beta2, when a form is created setData(null) is called first               
     
           if($data instanceof Province) 
           {                 
            $refreshPays($form, $data->getDepartement()->getPays());                 
           }         
          });
     
          $builder->addEventListener(FormEvents::PRE_BIND, function (DataEvent $event) use ($refreshPays) 
          {             
           $form = $event->getForm();             
           $data = $event->getData();               
     
           if(array_key_exists('pays', $data)) 
            {                 
             $refreshPays($form, $data['pays']);             
            }         
          });                       
        }
     
        public function getName()
        {
            return 'hotels_gestionannoncesbundle_provincetype';
        }
    }
    J'obtiens l'erreur suivante lors de son exécution :

    "Fatal error: Class 'Hotels\GestionAnnoncesBundle\Form\FormEvents' not found in C:\wamp\www\Symfony\src\Hotels\GestionAnnoncesBundle\Form\ProvinceType.php on line 40".

    Est ce que je dois ajouter quelque chose dans ''Hotels\GestionAnnoncesBundle\Form\FormEvents"?

    Merci d'avance pour votre aide.

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    J'avance un peu : j'ai ajouté la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Symfony\Component\Form\FormEvents;
    L'erreur précédente est résolue, mais j'obtiens maintenant le message d'erreur suivant :

    "Catchable Fatal Error: Argument 1 passed to Hotels\GestionAnnoncesBundle\Form\{closure}() must be an instance of Hotels\GestionAnnoncesBundle\Form\DataEvent, instance of Symfony\Component\Form\Event\DataEvent given in C:\wamp\www\Symfony\src\Hotels\GestionAnnoncesBundle\Form\ProvinceType.php line 41"

  11. #11
    Membre régulier
    Profil pro
    IED Web
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : IED Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 90
    Points
    90
    Par défaut
    Même chose, ajoute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Symfony\Component\Form\Event\DataEvent;

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Merci beaucoup pour ton aide.

    De fait entre temps, j'avais ajouté cette ligne, et j'ai également du ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Doctrine\ORM\EntityRepository;
    Cependant, maintenant, j'obtiens une erreur que j'ai plus de mal à comprendre :

    "[Semantical Error] line 0, col 79 near 'departement.': Error: 'departement' is not defined.
    500 Internal Server Error - QueryException
    "

  13. #13
    Membre régulier
    Profil pro
    IED Web
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : IED Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 90
    Points
    90
    Par défaut
    [Semantical Error] line 0, col 79 near 'departement.': Error: 'departement' is not defined.

    Il y a un point qui devrai pas être là apparemment, et ça parle de Query, verifie les annotations Doctrine concernant ton champs departement dans ton entity peut-être.

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Encore un grand merci pour ton aide. Voici mon template .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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <h1>Province creation</h1>
     
    <form action="{{ path('province_create') }}" method="post" {{ form_enctype(form) }}>
        <div class="error">
    	   {{ form_errors(form) }}
        </div>
        <table>
         <tr>
          <th>{{ form_label(form.nom) }}</th>
          <th>{{ form_label(form.departement) }}</th>
          <th>{{ form_label(form.pays) }}</th>
         </tr>
         <tr>
          <td>
           {{ form_errors(form.nom) }}
    	     {{ form_widget(form.nom) }}
          </td>
          <td>
           {{ form_errors(form.departement) }}
    	     {{ form_widget(form.departement) }}
          </td>
          <td>
           {{ form_errors(form.pays) }}
    	     {{ form_widget(form.pays) }}
          </td>
         </tr>
        </table>
        <p>
            <button type="submit">Create</button>
        </p>
    </form>
     
    <ul class="record_actions">
        <li>
            <a href="{{ path('province') }}">
                Back to the list
            </a>
        </li>
    </ul>
    Et voici mon formulaire .php :

    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
    <?php   
     
    namespace Hotels\GestionAnnoncesBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
    use Symfony\Component\Form\FormEvents;
    use Symfony\Component\Form\Event\DataEvent;
    use Doctrine\ORM\EntityRepository;
     
     
    class ProvinceType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            /*$builder
                ->add('nom')
                ->add('departement')
                ->add('pays')
            ;*/
     
            $builder
                ->add('nom')
                ->add('departement');
     
            $factory = $builder->getFormFactory();
     
            $refreshPays = function ($form, $departement) use ($factory) 
            {             
             $form->add($factory->createNamed('entity','pays',null, array(                 
               'class' => 'Hotels\GestionAnnoncesBundle\Entity\Pays',                 
               'property' => 'name',                 
               'label' => 'Pays',                 
               'query_builder' => function (EntityRepository $repository) use ($departement) 
                                  {                                        
                                   $qb = $repository->createQueryBuilder('pays');                                          
                                   $qb = $qb->where('pays.id = departement.pays');
     
                                   return $qb;                                    
                                  }                  
              )));         
          };
     
          $builder->addEventListener(FormEvents::PRE_SET_DATA, function (DataEvent $event) use ($refreshPays) 
          {             
           $form = $event->getForm();             
           $data = $event->getData();               
     
           if($data == null)                
            $refreshPays($form, null); //As of beta2, when a form is created setData(null) is called first               
     
           if($data instanceof Province) 
           {                 
            $refreshPays($form, $data->getDepartement()->getPays());                 
           }         
          });
     
          $builder->addEventListener(FormEvents::PRE_BIND, function (DataEvent $event) use ($refreshPays) 
          {             
           $form = $event->getForm();             
           $data = $event->getData();               
     
           if(array_key_exists('pays', $data)) 
            {                 
             $refreshPays($form, $data['pays']);             
            }         
          });                       
        }
     
        public function getName()
        {
            return 'hotels_gestionannoncesbundle_provincetype';
        }
    }

  15. #15
    Membre régulier
    Profil pro
    IED Web
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : IED Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 90
    Points
    90
    Par défaut
    De rien, de rien.

    En fait, après petite réflexion, c'est une erreur concernant la requete en BDD je pense.
    Ton champs se nomme bien "departement" dans ta table, tu l'as bien declaré comme tel dans les annotations de Doctrine de ton entity?

  16. #16
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Oui, d'ailleurs voici mon entity :

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    <?php
     
    namespace Hotels\GestionAnnoncesBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
     
    /**
     * Hotels\GestionAnnoncesBundle\Entity\Province
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Hotels\GestionAnnoncesBundle\Entity\ProvinceRepository")
     */
    class Province
    {
        /**
         * @var integer $id
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var string $nom
         *
         * @ORM\Column(name="nom", type="string", length=40)
         * @Assert\NotNull()
         */
        private $nom;
     
        /**
         * @ORM\ManyToOne(targetEntity="Hotels\GestionAnnoncesBundle\Entity\Departement")
         */
        private $departement;
     
        /**
         * @ORM\ManyToOne(targetEntity="Hotels\GestionAnnoncesBundle\Entity\Pays")
         * @Assert\NotNull()
         */
        private $pays;
     
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set nom
         *
         * @param string $nom
         */
        public function setNom($nom)
        {
            $this->nom = $nom;
        }
     
        /**
         * Get nom
         *
         * @return string 
         */
        public function getNom()
        {
            return $this->nom;
        }    
     
        /**
         * Get departement
         *
         * @return entity Departement 
         */
        public function getDepartement()
        {
            return $this->departement;
        }
     
        /**
         * Set departement
         *
         * @param entity $departement
         */
        public function setDepartement(\Hotels\GestionAnnoncesBundle\Entity\Departement $departement)
        {
            $this->departement = $departement;
        }    
     
        /**
         * Get pays
         *
         * @return entity Pays 
         */
        public function getPays()
        {
            return $this->pays;
        }
     
        /**
         * Set pays
         *
         * @param entity $pays
         */
        public function setPays(\Hotels\GestionAnnoncesBundle\Entity\Pays $pays)
        {
            $this->pays = $pays;
        }
    }
    Et dans ma base de données, ça donne departement_id de type 'int'

  17. #17
    Membre régulier
    Profil pro
    IED Web
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : IED Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 90
    Points
    90
    Par défaut
    En fait le probleme est là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
               'query_builder' => function (EntityRepository $repository) use ($departement) 
                                  {                                        
                                   $qb = $repository->createQueryBuilder('pays');                                          
                                   $qb = $qb->where('pays.id = departement.pays');
     
                                   return $qb;                                    
                                  }
    'departement.pays' il connait pas. Il faut revoir son accès avec un jointure et les bonnes declarations Doctrine.
    Aussi, tu fais un use ($departement) mais il est pas utilisé dans le cas de figure actuel.
    Tu as du changer ton query_builder depuis non ?

  18. #18
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Si je comprends bien, lorsque j'utilise un query_builder, à ce moment, il travaille directement avec les champs de la base de données et non avec les entités?

    Dans ce cas, comme argument dans mon tableau pour créer le champ, je ne devrais pas avoir 'query_builder', mais quelque chose qui me permette, dans ma fonction, d'instancier l'objet 'Pays' adéquat lorsqu'un département est choisi.

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pays = $departement->getPays();

  19. #19
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Désolé je n'ai pas tout lu, j'ai juste vu le dernier message, et effectivement ton queryBuilder est incorrect. Ca serait pas un truc de ce genre plutôt ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $qb = $repository->createQueryBuilder('pays')
                            ->addSelect('dep')->join('pays.departement','dep')                                      
                            ->where('dep = :dep')->setParameter('dep',$departement);
    Edit : Mince, raté ton dernier message.
    Tu veux quoi en fait ? Qu'au chargement du formulaire il y ait déjà le bon pays sélectionné ? Et / Ou tu souhaites qu'une requete Ajax détecte le pays une fois le département choisi ?

  20. #20
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Merci également de l'intérêt que tu portes à mon problème. Etant débutant avec Symfony, je galère un peu...

    Ce que je cherche à faire, c'est lors de la création d'une province, si un département est choisi, alors le bon pays est sélectionné. Si aucun département n'est choisi (il n'est pas obligatoire), alors c'est la liste complète des pays qui est présentée.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [DOM] Deuxieme liste déroulante liée via ajax, encore inclure ajax?
    Par clara1 dans le forum Général JavaScript
    Réponses: 48
    Dernier message: 16/05/2008, 15h06
  2. [AJAX] Listes déroulantes liées
    Par Jiraiya42 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 14/04/2008, 09h58
  3. ajax, php et 3 listes déroulantes liées
    Par jfox dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/04/2008, 14h13
  4. Plusieurs listes déroulantes liées (ajax)
    Par sassien dans le forum Struts 2
    Réponses: 1
    Dernier message: 18/03/2008, 13h52
  5. [AJAX] Listes déroulantes liées avec Ajax
    Par paupiette dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/08/2006, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo