J'ai besoin de votre aide pour un "choice_label"_d'un formulaire ! (symfony3)

class ListeType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, array('label'=>'Entrer le nom de la nouvelle liste : '))
            ->add('commentaire')
            ->add('personnes', EntityType::class, array(
                'class' => 'structureBundle:Personne',
                'choice_label' => 'name',
                'label' => 'Insérer les personnes dans la liste : ',
                'expanded'=> TRUE,
                'multiple'=> TRUE,
                ))                 
            ->add('save', SubmitType::class, array('label' => 'Créer la nouvelle liste : '))           
        ;
    }

Mon choicelabel n'affiche que le nom des personnes qui sont dans ma table Personne (normal c'est ce que je lui demande). Mais j'aimerais bien afficher d'autres attributs de chaque Personne. Par exemple : 'prenom'. Or choicelabel n'accepte qu'un argument.

Est-ce que quelqu'un peut me donner une piste ?

Par avance merci pour votre aide !

Nans

6 réponses


Salut, je te donne une piste qui devrait normalement te suffire. Regarde le premier exemple http://symfony.com/blog/new-in-symfony-2-7-choice-form-type-refactorization

nans
Auteur

Merci pour ton aide. Je cherche encore. Je posterai mon code quand il marchera.

nans
Auteur

Bon je n'y arrive vraiment pas. J'ai essayé un __toString mais je dois me planter... La nuit porte conseil, je testerai demain

L'exemple ci-dessous devrait fonctionner :

"choice_label" => function ($allChoices, $currentChoiceKey)
{
    return $allChoices->getFirstName() . " " . $allChoices->getLastName();
},

Pour comprendre ce que les variables contiennent, fais un dump de $allChoices et $currentChoiceKey

nans
Auteur

Merci, je vais tester cela tout de suite.
J'ai trouvé une autre solution avec ça dans mon entité Personne :

    public function __toString() {
        $prenom=$this->getLastname();
        $nom=$this->getName();
        $age=$this->getAge();
        $personne="Nom : $nom, Prénom : $prenom, Age : $age.";
        return "$personne";
    }

Et ça dans mon formulaire :

                'choice_label' => function ($personne) {
                return $personne;}

ça marche pas mal. Mais c'est peut-être pas très académique, je ne sais pas.

nans
Auteur

Merci ! ça marche nickel ! Je préfère ta solution, ça m'évite d'utiliser __toString qui devrait me servir pour autre chose avec moins d'infos dedans !