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 !
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';
}
},
]);
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