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 :

Formulaires et liste déroulante [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut Formulaires et liste déroulante
    Bonjour,

    je m'interroge sur la meilleure façon de renseigner dynamiquement les valeurs d'une liste déroulante dans un formulaire.

    Je pars donc d'une liste déroulante comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $builder->add('foo_choices', 'choice', array(
        'choices' => array('foo' => 'Foo', 'bar' => 'Bar', 'baz' => 'Baz'),
        'preferred_choices' => array('baz'),
    ));
    et je souhaite que le tableau de choix passé en paramètres soit généré à partir d'une entité.

    La doc symfony2 préconise l'utilisation d'une "ChoiceListInterface" mais je ne vois pas comment l'utiliser.
    Sinon, je peux générer un tableau moi-même à partir de mon entité mais est-ce la bonne méthode?
    Avez-vous déjà fait ça?

    Au plaisir de vous lire...

  2. #2
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Par défaut
    Salut,

    Avec le EntityType cela ne fonctionne-t-il pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    use Symfony\Bridge\Doctrine\Form\Type\EntityType;
     
    $builder->add('users','entity',
         array('class' => 'Acme\\HelloBundle\\Entity\\User',
    ));
    http://symfony.com/doc/current/book/...rm-integration

    http://api.symfony.com/2.0/Symfony/B...ntityType.html

    +++

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 50
    Par défaut
    Pour ma part le EntityType fonctionne, mais je reste bloqué sur un autre problème, je voudrais que cette liste soit renseignée en fonction de ce que je sélectionne dans une autre liste déroulante mais je ne sais pas comment faire avec du javascript dans ce cas.

    Dans mon cas il s'agit d'écrire un article, qui est rattaché à une sous-rubrique.
    Et la sous-rubrique dépend de la rubrique.


    Mais lorsque je créais mon builder pour cette seconde liste déroulante, le champ ne faisant pas parti de mon objet "article", il ne trouve pas de setter et refuse de me l'afficher...

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut
    Salut et merci pour vos réponses,

    je n'ai pas réussi avec l'entité, il attend un tableau et j'ai évidemment la réponse suivante:
    Expected argument of type array or \Closure, string given
    J'ai finalement crée une classe statique qui génère un tableau (id => label).

    @massacreur : comment as-tu fait pour utiliser ton entité directement? as-tu créé dans cette entité une méthode getAll() ou quelque chose comme ça?

    A+

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 50
    Par défaut
    Essaie en renseignant les différentes propriétés du builder en mode EntityType, cela vient sans doute de la.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $builder->add('article','entity', array(
                'class' => 'Application\MonAppliBundle\Entity\Article',
                'property' => 'nomArticle',
                'multiple' => false,
                'required' => false
                ));
    De cette façon tu précises que ta liste déroulante doit afficher dans la liste déroulante le champ "property" c'est à dire le nom de l'article dans mon cas.

    Et non je n'ai pas eu besoin de créer de méthode getAll ou autre...

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut
    Bon,
    je poste ma solution si ça peut aider quelqu'un :

    D'abord on a le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $choicesArray = ChoiceListGenerator::generateFullItemList($em);
    $form = $this->get('form.factory')
             ->createBuilder('form', $myEntity)
             ->add('Item', 'choice', 
                      array ('label' => "myItem", 
                             'choices' => $choicesArray))
             ->getForm();
    Et la classe qui génère le tableau :
    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
    class ChoiceListGenerator
    {
       /**
        * génère une liste de code et de valeurs pour les listes déroulantes
        * @return array tableau de type array($code => $value) 
        * à utiliser dans un select.
        * @param type $em entityManager
        */
       public static function generateFullItemList($em)
       {
          $itemList = $em->getRepository('Path\To\Entity\myEntity')->findAll();
          foreach ($itemList as $item)
          {
             $choicesArray[$item->getItemCode()] = $item->getItemName();
          }
          return $choicesArray;
       }
     
    }
    Voilà ça marche.
    Je suis curieux de savoir s'il n'y a rien de prévu dans le framework quand même...

    A bientôt!

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut
    Désolé massacreur, j'étais en train d'écrire mon post quand tu m'as répondu...

    J'ai testé rapidement ta solution mais j'ai toujours un message d'erreur me disant "object expected, string given".

    Je ne vais pas passer la journée là-dessus, mais merci quand même pour tes conseils, je regarderai plus en détail une autre fois.

    A bientôt.

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

Discussions similaires

  1. [Formulaire] méchante liste déroulante
    Par choups76 dans le forum IHM
    Réponses: 8
    Dernier message: 19/04/2007, 15h51
  2. Recherche formulaire avec liste déroulante
    Par kimar dans le forum Access
    Réponses: 2
    Dernier message: 28/07/2006, 13h02
  3. Réponses: 9
    Dernier message: 10/07/2006, 15h52
  4. Pb Formulaire avec liste déroulante
    Par Rouanou dans le forum IHM
    Réponses: 12
    Dernier message: 23/11/2005, 17h51

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