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 :

[2.x] Ajax, select et récupération des valeurs


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2013
    Messages : 71
    Par défaut [2.x] Ajax, select et récupération des valeurs
    Bonjour,

    J'ai utilisé cet excellent tutoriel afin d'implémenter Ajax sur un de mes formulaires :


    L'objectif est de sélectionner un médicament dans une liste après l'avoir recherché dans un champ texte. La saisie de caractères déclenche un événement ajax qui alimente le select (liste de médicaments correspondant à la recherche). Les options du select ressemblent à ceci (vérifié avec un alert) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value="13">Le médoc 13</option>
    Cette partie fonctionne parfaitement en revanche, je rencontre des difficultés au moment de récupérer les infos du select.

    En effet, pour que Symfony sache que je lui passe un médicament (et non un simple integer) et conformément au tutoriel, j'ai créé un listener sur l'événement POST_SUBMIT. Dans cet événement, je rajoute un champ entity dont le query_builder me retourne l'objet médicament(13).

    Seulement voilà, impossible de récupérer cette valeur 13 (ou autre, 13 est un exemple ) !!!

    Après de multiples tests (et digressions vis-à-vis du tutoriel de départ), voici la situation :
    • un champ texte non mappé où l'utilisateur tape sa recherche
    • un champ choice vide au départ et non mappé également qui se remplit avec ajax en fonction de la saisie de la recherche (et qui sélectionne un champ par défaut histoire de ne pas submit sans rien envoyer)
    • un champ entity qui est créé par le listener POST_SUBMIT afin de créer le champ qui permet d'envoyer l'objet au "format" Symfony


    Dans mon listener :
    • si je fais un $event->getForm()->get('champ_texte')->getData(), il me retourne bien la chaine que l'utilisateur a saisie.
    • si je fais un $event->getForm()->get('champ_choice')->getData(), il me retourne systématiquement NULL même après avoir sélectionné un objet de ma liste.


    Sans cet identifiant, impossible pour moi de créer l'entité correspondante au choix de l'utilisateur dans champ_choice.

    Ci-dessous, le code de mon 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
    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
    <?php
     
    namespace Medic\PrescriptionBundle\Form\Type;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\Form\FormEvent;
    use Symfony\Component\Form\FormEvents;
    use Symfony\Component\Form\FormInterface;
    use Medic\PrescriptionBundle\Model\Repository\MedicamentRepository;
     
    class AddPrescriptionType extends AbstractType
    {
     
        private $em;
     
        public function __construct($em)
       {
            $this->em = $em;
        }
     
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                    ->add('fkVoie', 'entity', array('label' => 'Voie d\'administration',
                        'class' => 'MedicPrescriptionBundle:TypeForme',
                        'choice_label' => 'libelle',
                        'attr' => array('class' => 'fkVoie')))
                    ->add('champ_texte', null, array('mapped' => false, 'required' => false, 'label' => 'Médicament',
                        'attr' => array('class' => 'medic_prescription_type_medicamentsearchbyselecttype_maRecherche')))
                    ->add('champ_choice', 'choice', array('mapped' => false, 'attr' => array('class' => 'medic_prescription_type_medicamentsearchbyselecttype_nom')))
                    ...
            ;
     
            $medicamentFunction = function(FormInterface $form, $medicamentId)
            {
                $form->add('champ_entity', 'entity', array('class' => 'MedicPrescriptionBundle:Medicament',
                    'choice_label' => 'libelle',
                    'query_builder' => function(MedicamentRepository $repo) use ($medicamentId)
                    {
                        return $repo->findOneById($medicamentId);
                    }));
            };
     
            $builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event) use ($medicamentFunction)
            {
                var_dump($event->getForm()->get('champ_texte')->getData()); // Affiche bien ce qu'à saisie l'utilisateur
                var_dump($event->getForm()->get('champ_choice')->getData()); // Affiche toujours NULL quoiqu'il arrive
                die();
                $medicamentFunction($event->getForm(), $event->getForm()->getData());
            });
        }
     
        public function getName()
        {
            return 'medic_prescription_type_prescription';
        }
     
    }
    Merci d'avance pour l'aide que vous pourrez m'apporter.

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2013
    Messages : 71
    Par défaut
    J'ai résolu mon problème en ajoutant un champ hidden qui reçoit la valeur de l'option sélectionnée au moment du changement du select. Je récupère ainsi après le handle du formulaire la valeur de ce champ.

    C'est très moche et je n'en suis pas fier mais ça fonctionne... du coup, ma question tient toujours pour une résolution avec si possible moins de surcouches et un meilleur niveau de sécurité.

Discussions similaires

  1. Servlet select multiple récupération des valeurs
    Par fredmac2g dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 22/01/2013, 10h52
  2. Récupération des valeurs du Select
    Par DSGSLA dans le forum Bases de données
    Réponses: 2
    Dernier message: 05/03/2010, 11h38
  3. [1.x] Récupération des valeurs sectionnées d'un select multiple
    Par jemele dans le forum Symfony
    Réponses: 6
    Dernier message: 20/06/2008, 12h21
  4. Récupération des valeurs select multiple sans sélection
    Par akara dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 17/07/2007, 19h10
  5. Récupération des valeurs de select
    Par ikhibi dans le forum Langage
    Réponses: 1
    Dernier message: 19/02/2007, 10h53

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