ChoiceType Symfony FormType | Radio button valeur par défaut dans un FormType

Comment mettre une valeur par défaut à un groupe de radio button de type ChoiceType sous Symfony 4+ ?

Actuellement vous utilisez surement les formulaires de cette façon :

 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('choice', ChoiceType::class, [
             'label' => 'Choisir',
             'choices' => [
                  'Oui' => 2,
                  'Non' => 1,
                  "Ne sais pas" => 0
              ],
             'expanded' => true,
             'multiple' => false
     ]);
 }

Ce qui vous donne en résultat un groupe de 3 radios buttons avec un seul choix possible, mais si vous mettez directement ici une valeur par défaut, elle écrasera les valeurs de l’entité si vous souhaitez la modifier par la suite.

Définir par défaut une valeur dans le cas d’une création d’entité dans le FormType

Au lieu d’utiliser la méthode habituelle comme au dessus, utilisez cette méthode de la documentation officielle qui utilise les Events des formulaires :

public function buildForm(FormBuilderInterface $builder, array $options)
{
    // On modifie le formulaire avant de définir les datas
    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
        //On récupère l'entité lié au formulaire
        $entity = $event->getData();
        $form = $event->getForm();

        $form->add('choice', ChoiceType::class, [
             'label' => 'Choisir',
             'choices' => [
                  'Oui' => 2,
                  'Non' => 1,
                  "Ne sais pas" => 0
              ],
             'expanded' => true,
             'multiple' => false
             //On définit ici la valeur par défaut
             //Si le choix existe on le mets sinon on mets à 0 (Ne sais pas)
             'data' => $entity->getChoice() ? $entity->getChoice() : 0
        ]);
    });
}

Elle permet de définir la bonne valeur en fonction de l’entité et donc de toujours garder en mémoire le formulaire en fonction de l’entité modifiée ou non.

Merci d’avoir lu, n’hésitez pas à partager !