Bonjour,

Je voudrais savoir s'il est possible de choisir moi même ce qui s'affiche dans une liste d'options qui est chargée à partir d'une base données.
Plus précisément, j'ai deux tables Compte et SousCompte reliées par une relation tel que SousCompte hérite de la clé de Compte.
Ex: Compte (id int, code int, intitule String); SousCompte(id int, code:int, ,intitule String, idCompte int).
J'ai créer la base de données puis j'ai généré mes entités avec la commande :
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity
ensuite j'ai générer les getters et setters avec la commande :
php bin/console make:entity --regenerate App
Puis j'ai générer les crud avec :
php bin/console make:crud Compte -- php bin/console make:crud SousCompte.

Après avoir repli la table Compte, je veux remplir la table sous-compte; mais le formulaire de remplissage affiche au niveau de la liste d'options juste l'intitulé du compte. Or, je voudrais qu'il affiche le code du compte, concaténé à l'intitulé du compte.
Exemple : "60 - Achat" au lieu de "Achat".
Si quelqu'un peut m'aider, je suis preneur !
Je travail avec symfony 4.9.0 et je suis débutant.
Merci d'avance !

4 réponses


diaviso
Auteur
Réponse acceptée

Voilà c'est réglé !

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('code')
            ->add('intitule')
            ->add('compte', EntityType::class, [
                'class' => Compte::class,
                'choice_label' => function ($compte) {
                    return $compte->getCode().' '.$compte->getLibelle();
                }
            ])
        ;
    }

j'ai trouvé la solution dans la documentation de symfony :
https://symfony.com/doc/current/reference/forms/types/entity.html
Merci !

Salut,
et si tu regroupe tes choix ça te va pas ?

https://symfony.com/doc/current/reference/forms/types/choice.html#group-byend

use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
// ...

$builder->add('publishAt', ChoiceType::class, [
    'choices' => [
        'now' => new \DateTime('now'),
        'tomorrow' => new \DateTime('+1 day'),
        '1 week' => new \DateTime('+1 week'),
        '1 month' => new \DateTime('+1 month'),
    ],
    'group_by' => function($choice, $key, $value) {
        if ($choice <= new \DateTime('+3 days')) {
            return 'Soon';
        } else {
            return 'Later';
        }
    },
]);

https://symfony.com/doc/current/_images/choice-example5.png

diaviso
Auteur
In fact I would not want to group my choices,
I would just like both attributes to be visible at the label (code and title)
there are accounts that have the same title but not the same code
Ex: "60 Purchase" and "81 Purchase" so if it displays only "Purchase" I would not know which to choose!

I'm trying to change the attibut choice_attr but nothing is displayed anymore in my list of choices

public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder
        ->add('code')
        ->add('intitule')
        ->add('compte', choiceType::class, [
            'choice_attr' => function(Compte $compte, $key, $value) {
                return ['class' => 'compte_'.strtolower($compte->getCode().' '.$compte->getLibelle())];
            },
        ])
    ;
}

Parfait que tu es trouver. La doc est vraiment bien faite sur symfony ;)
Pour plus de lisibilité tu peux mettre ton code dans le block prévu a cet effet ? ( Le symbole est </> dans l'editeur de message)

Place ton code ici