web-dev-qa-db-fra.com

Valeur par défaut du champ de choix

J'ai le formulaire suivant:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
    ->add('type', ChoiceType::class, array(
        'expanded' => true,
        'multiple' => false,

        'choices' => array(
            'Friend' => 'friend',
            'Guide' => 'guide'
        )
    ));
}

Comment puis-je cocher 'Friend' pour être coché par défaut lorsque le formulaire est rendu?

14
Alexander Lomia

Utilisez l'option empty_data du champ de formulaire. (pas data car il écrasera toutes les données publiées à moins que vous ne les définissiez de manière dynamique).

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
    ->add('type', ChoiceType::class, array(
        'expanded' => true,
        'multiple' => false,

        'choices' => array(
            'Friend' => 'friend',
            'Guide' => 'guide'
        ),
        'empty_data' => 'friend'
    ));
}

Une autre option pour les cas complexes consiste à utiliser Sf Dynamic Form Events .

14
Romain Bruckert

Je pense que vous devriez essayer avec l'option data, mais c'est juste dans le cas où vous n'avez même pas de données sauvegardées dans votre objet, car il remplacera le reste.

Important: C'est utile pour créer une action, mais pas pour une action d'édition.

 public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        ->add('type', ChoiceType::class, array(
            'expanded' => true,
            'multiple' => false,

            'choices' => array(
                'Friend' => 'friend',
                'Guide' => 'guide'
            ),
            'data' => 'friend'
        ));
    }

Lien officiel

Extrait

Lorsque vous créez un formulaire, chaque champ affiche initialement la valeur du fichier propriété correspondante de l'objet domaine du formulaire (si un objet est lié au formulaire). Si vous souhaitez remplacer la valeur initiale du fichier forme ou juste un champ individuel, vous pouvez le définir dans l'option de données

UPDATE Si vous avez besoin d'une valeur vide:

Comme réponse ci-dessous, remplacez data par empty_data si vous avez besoin dans tous les cas de mettre à jour la valeur par défaut.

14
Pimento Web

Je pense qu'il serait préférable de définir les valeurs initiales dans le constructeur d'entité:

public function __construct()
{
    $this->exercises = new ArrayCollection();

    $this->setTitle("WOCHE#") ;

    $this->setYear(date('Y'));

    $this->setWeekInCalendar(Week::getCurrentWeekInCalendar());
}
2
Shadi Akil

Si vous ne souhaitez pas remplacer la valeur d'une édition, vous pouvez le faire:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
        $form = $event->getForm();

        $form->add(
            'type', 
            ChoiceType::class,
            [
                'expanded' => true,
                'multiple' => false,
                'choices' => [
                    'Friend' => 'friend',
                    'Guide' => 'guide'
                ],
                'data' => $event->getData() ?: 'friend'
            ]);
    });
}
1
Fabien Salles