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 :

Formulaire: récupérer une liste derroulante d 'une table [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Par défaut Formulaire: récupérer une liste derroulante d 'une table
    Voila mon problème est assez simple, mais j arrive pas à le faire

    J ai une entité Achat qui a comme attribut le fournisseur.

    J aimerai avoir au niveau du formulaire une liste déroulante qui me donne les nom des societe dans une liste déroulante mais je sais pas comment le faire
    mon formulaire est le suivant:

    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
    <?php
     
    namespace portailQuapricAuto\LogistiqueBundle\Form;
     
    use portailQuapricAuto\VehiculeBundle\Form\VoitureType;
    use portailQuapricAuto\ContactBundle\Form\FournisseurType;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
     
    class AchatType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
     
                ->add('date','birthday')
                ->add('villeAchat', 'text', array('max_length' => 20, 'required' => false, 'label' => 'Ville d \'achat ', 'trim' => true, 'read_only' => false, 'error_bubbling' => false))
     
                ->add('Vehicule', new voitureType )
            ;
        }
     
        public function getName()
        {
            return 'portailquapricauto_logistiquebundle_achattype';
        }
    }
    mais voila ça marche pas j ai pas de champ

    pouvez vous svp m'aider

    et supposons que que j arrive à afficher la liste déroulante, comment faire pour pour mettre idChamp dans à la place du formulaire lors du traitement

    merci

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 79
    Par défaut
    Salut,

    Si je comprends bien ce que tu veux faire.
    C'est d'afficher et choisir dans une liste déroulante et pouvoir enregistrer la variable qui sera choisi dans le champ du formulaire ?

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    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
    <?php
     
    namespace portailQuapricAuto\LogistiqueBundle\Form;
     
    use portailQuapricAuto\VehiculeBundle\Form\VoitureType;
    use portailQuapricAuto\ContactBundle\Form\FournisseurType;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
     
    class AchatType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
     
                ->add('date','birthday')
                ->add('villeAchat', 'text', array('max_length' => 20, 'required' => false, 'label' => 'Ville d \'achat ', 'trim' => true, 'read_only' => false, 'error_bubbling' => false))
     
                ->add('Vehicule', new voitureType )
                ->add('fournisseur', 'entity', array(
                    'class' => 'portailQuapricAutoContactBundle:Fournisseur',
                    'property' => 'name',
                ))
            ;
        }
     
        public function getName()
        {
            return 'portailquapricauto_logistiquebundle_achattype';
        }
    }
    Il faut utiliser le type de champ entity. L'option class prend le nom de l'entité qui représente tes fournisseurs, l'option property prend le nom de la propriété de l'entité qui servira d'affichage dans la liste déroulante. L'ID qui servira de value aux <option> générés sera le champ repéré comme ID de l'entité dans le mapping (c'est automatique et transparent tant que ta clé n'est pas composée).

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Par défaut
    Citation Envoyé par pc.bertineau Voir le message
    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
    <?php
     
    namespace portailQuapricAuto\LogistiqueBundle\Form;
     
    use portailQuapricAuto\VehiculeBundle\Form\VoitureType;
    use portailQuapricAuto\ContactBundle\Form\FournisseurType;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
     
    class AchatType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
     
                ->add('date','birthday')
                ->add('villeAchat', 'text', array('max_length' => 20, 'required' => false, 'label' => 'Ville d \'achat ', 'trim' => true, 'read_only' => false, 'error_bubbling' => false))
     
                ->add('Vehicule', new voitureType )
                ->add('fournisseur', 'entity', array(
                    'class' => 'portailQuapricAutoContactBundle:Fournisseur',
                    'property' => 'name',
                ))
            ;
        }
     
        public function getName()
        {
            return 'portailquapricauto_logistiquebundle_achattype';
        }
    }
    Il faut utiliser le type de champ entity. L'option class prend le nom de l'entité qui représente tes fournisseurs, l'option property prend le nom de la propriété de l'entité qui servira d'affichage dans la liste déroulante. L'ID qui servira de value aux <option> générés sera le champ repéré comme ID de l'entité dans le mapping (c'est automatique et transparent tant que ta clé n'est pas composée).
    merci à vous pour vos reponse, sauf que là mon pb à changer, j ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Catchable Fatal Error: Argument 1 passed to portailQuapricAuto\LogistiqueBundle\Entity\Achat::setVehicule() must be an instance of portailQuapricAuto\LogistiqueBundle\Entity\portailQuapricAuto\VehiculeBundle\Entity\Vehicule, array given, called in F:\serveurLocal\wamp\www\Symfony2\vendor\symfony\src\Symfony\Component\Form\Util\PropertyPath.php on line 347 and defined in F:\serveurLocal\wamp\www\Symfony2\src\portailQuapricAuto\LogistiqueBundle\Entity\Achat.php line 175
    et je pense que mon pb c est au niveau d ici:
    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
    $achat  = new Achat();
                $request = $this->getRequest();
                $form    = $this->createForm(new AchatVoitureType(), $achat);
                $form->bindRequest($request);
     
                if ($form->isValid()) {
                    $em = $this->getDoctrine()->getEntityManager();
                    $em->persist($achat);
                    $em->persist ($achat->getVehicule());
                    $em->flush();
     
                    return $this->redirect($this->generateUrl('achat_show', array('id' => $entity->getId())));
     
                }
     
                return $this->render('LogistiqueBundle:Achat:new.html.twig', array(
                    'entity' => $entity,
                    'form'   => $form->createView()
                ));

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    J'ai l'impression que ton entité Achat n'a pas de relation vers l'entité Vehicule...

    Il t'en faut une pour exploiter le champ 'entity'...

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Par défaut
    Citation Envoyé par pc.bertineau Voir le message
    J'ai l'impression que ton entité Achat n'a pas de relation vers l'entité Vehicule...

    Il t'en faut une pour exploiter le champ 'entity'...
    Justement si, c est le suivant:
    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
      /**
        * @ORM\OneToOne(targetEntity="portailQuapricAuto\VehiculeBundle\Entity\Vehicule", cascade={"persist", "merge", "remove"})
        * @ORM\JoinColumn(name="vehicule", referencedColumnName="id",nullable=true)
        */
        private $vehicule;
       /**
        * @param Vehicule $vehicule
        */
        public function setVehicule(portailQuapricAuto\VehiculeBundle\Entity\Vehicule $vehicule)
        {
        $this->vehicule = $vehicule;
        }
     
        /**
        * @return portailQuapricAuto\VehiculeBundle\Entity\Vehicule
        */
        public function getVehicule()
        {
        return $this->vehicule;
        }

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,
    As tu une option data_class dans ton VoitureType?
    http://symfony.com/doc/current/book/...rms-data-class

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Par défaut
    Citation Envoyé par arnooo999 Voir le message
    Bonjour,
    As tu une option data_class dans ton VoitureType?
    http://symfony.com/doc/current/book/...rms-data-class
    oui je l ai également fais, j ai les cheveux blanc là

  9. #9
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Rien à voir avec ton problème, mais au passage tu as des problèmes de casse
    use portailQuapricAuto\VehiculeBundle\Form\VoitureType;
    ...
    ->add('Vehicule', new voitureType )
    sur un linux ça fait planter l'appli

  10. #10
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    +1 pour la rigueur, avec un langage permissif comme PHP, c'est au développeur de s'astreindre à respecter les règles de base

    d'ailleurs, ton champ de Form doit correspondre au champ de ton entité, donc majuscule à VehiculeType mais minuscule pour le nom du champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ->add('vehicule', new VoitureType )
    Pour moi il te faut plutôt ça pour vehicule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ->add('vehicule', 'entity', array(
                    'class' => 'portailQuapricAutoVehiculeBundle:Vehicule',
                    'property' => 'name',
                ))
    Qu'y a-t-il dans ton VoitureType ? Vu que tu as une relation 1:1, je ne pense pas que tu en aies besoin, sauf si tu souhaites le créer dans le même Form... Mais dans ce cas là tu ne peux pas mapper ton form sur ton entité directement...

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Par défaut
    Citation Envoyé par pc.bertineau Voir le message
    +1 pour la rigueur, avec un langage permissif comme PHP, c'est au développeur de s'astreindre à respecter les règles de base

    d'ailleurs, ton champ de Form doit correspondre au champ de ton entité, donc majuscule à VehiculeType mais minuscule pour le nom du champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ->add('vehicule', new VoitureType )
    Pour moi il te faut plutôt ça pour vehicule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ->add('vehicule', 'entity', array(
                    'class' => 'portailQuapricAutoVehiculeBundle:Vehicule',
                    'property' => 'name',
                ))
    Qu'y a-t-il dans ton VoitureType ? Vu que tu as une relation 1:1, je ne pense pas que tu en aies besoin, sauf si tu souhaites le créer dans le même Form... Mais dans ce cas là tu ne peux pas mapper ton form sur ton entité directement...
    tu veux dire -1 pour la rigueur lol, soyez indulgent c est mon première véritable projet en développement. Je suis un master ingénierie système on ne fais que tr-s peu de développement

    Bon j ai pu faire un peu de ménage, mais il me reste un léger souci de date:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ( ! ) Fatal error: Call to a member function format() on a non-object in F:\serveurLocal\wamp\www\Symfony2\vendor\doctrine-dbal\lib\Doctrine\DBAL\Types\DateType.php on line 44

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Par défaut
    Citation Envoyé par oukacha Voir le message
    tu veux dire -1 pour la rigueur lol, soyez indulgent c est mon première véritable projet en développement. Je suis un master ingénierie système on ne fais que tr-s peu de développement

    Bon j ai pu faire un peu de ménage, mais il me reste un léger souci de date:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ( ! ) Fatal error: Call to a member function format() on a non-object in F:\serveurLocal\wamp\www\Symfony2\vendor\doctrine-dbal\lib\Doctrine\DBAL\Types\DateType.php on line 44
    c 'est bon je suis convaincu que c est du à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ->add('date','date', array('widget' => 'choice','input' => 'timestamp','format' => 'd/M/y',
                        'empty_value' => array('year' => 'Année', 'month' => 'Mois', 'day' => 'Jour'),'pattern' => "{{ day }}/{{ month }}/{{ year }}",
     ?>                   'data_timezone' => "Europe/Paris",'user_timezone' => "Europe/Paris"))
    donc j ai contourné l erreur à metant un simple birthday lol
    et merci encore

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Citation Envoyé par oukacha Voir le message
    tu veux dire -1 pour la rigueur lol, soyez indulgent c est mon première véritable projet en développement. Je suis un master ingénierie système on ne fais que tr-s peu de développement
    C'était un vrai conseil, pas du tout une critique

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 08/11/2012, 17h47
  2. [AJAX] liste liée a une liste liée a une liste
    Par dirty_harry dans le forum AJAX
    Réponses: 2
    Dernier message: 03/07/2009, 11h18
  3. [MySQL] récupérer l'item selctionné d'une liste déroulante dans une variable php
    Par car0line dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 22/04/2009, 14h30
  4. acceder à une liste contenue dans une liste
    Par CPI_en_mousse dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 12/06/2007, 08h33
  5. remplir une liste à partir d'une liste
    Par LeXo dans le forum Access
    Réponses: 7
    Dernier message: 14/04/2006, 12h29

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