web-dev-qa-db-fra.com

Comment rendre une case à cocher qui est cochée par défaut avec symfony2 Form Builder?

Je n'ai trouvé aucun moyen facile d'accomplir de simplement cocher une case par défaut. Cela ne peut pas être si difficile, alors qu'est-ce qui me manque?

19
madc

Vous devez simplement définir la valeur dans votre modèle ou entité sur true et la transmettre au FormBuilder, puis elle doit être vérifiée.

Si vous regardez le premier exemple dans le documentation :

Une nouvelle tâche est créée, puis setTask est exécutée et cette tâche est ajoutée au FormBuilder. Si vous faites la même chose avec votre case à cocher

$object->setCheckboxValue(true);

et passez l'objet, vous devriez voir la case cochée.

Si cela ne fonctionne pas comme prévu, veuillez revenir avec un exemple de code reproduisant l'erreur.

18
Sgoettschkes

Vous pouvez également simplement définir l'attribut attr dans la méthode buildForm du générateur de formulaire:

$builder->add('isPublic', 'checkbox', array(
    'attr' => array('checked'   => 'checked'),
));
36
Simon Kerr

Dans Symfony> = 2.3, "chemin_propriété" est devenu "mappé".

Alors:

$builder->add('checkboxName', 'checkbox', array('mapped' => false,
    'label' => 'customLabel',
    'data' => true, // Default checked
));
19
Leto

Réglage du 'data' l'option fonctionne pour moi. Je crée un formulaire non basé sur une entité:

$builder->add('isRated','checkbox', array(
    'data' => true
));
16
lackovic10

Dans TWIG

Si vous souhaitez le faire directement dans le modèle:

{{ form_widget(form.fieldName, { 'attr': {'checked': 'checked'} }) }}
9
Mick

Utilisez la méthode FormBuilder :: setData ():

$builder->add('fieldName', 'checkbox', array('property_path' => false));
$builder->get('fieldName')->setData( true );

"chemin_propriété" à false car il s'agit d'un champ non-entité (Sinon, vous devez définir la valeur par défaut sur true à l'aide de votre setter d'entité).

La case à cocher sera cochée par défaut.

4
eDoV

Selon la documentation: http://symfony.com/doc/current/reference/forms/types/checkbox.html#value

Pour faire cocher une case ou un bouton radio par défaut, utilisez l'option de données.

1
R Sun

Vous devez apporter des modifications à l'objet temporaire où l'entité est stockée avant de l'afficher sur le formulaire. Quelque chose comme la prochaine:

<?php

namespace KPI\AnnouncementsBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class AnnouncementType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {  
        // ...        

        if ($options['data']->getDisplayed() === null) {
            $options['data']->setDisplayed(true);
        }

        // ...

        $builder
            ->add('displayed', 'checkbox', array(
                'required' => false
            ));
    }
}
1
metamaker
UserBundle\Entity\User

supposons que vous avez une entité appelée (User) et un membre nommé isActive, vous pouvez définir la case à cocher par défaut en configurant isActive sur true:

$user = new User();

// This will set the checkbox to be checked by default
$user->setIsActive(true);

// Create the user data entry form
$form = $this->createForm(new UserType(), $user);
1
Nezar Fadle

Cela fonctionne également, mais conscient de l'état "vérifié" persistant

$builder->add('isPublic', 'checkbox', array(
    'empty_data' => 'on',
));
1

Pour compléter un réponse précédente , avec un champ multiple vous pouvez le faire pour vérifier tous les choix:

   'choice_attr' => function ($val, $key, $index) {
       return array('checked' => true);
   }

https://symfony.com/doc/3.3/reference/forms/types/choice.html#choice-attr

1
Gautier

C'est ainsi que vous pouvez définir les valeurs par défaut pour les champs de cases à cocher multiples et étendues. Testé dans Symfony4, mais il doit fonctionner avec Symfony 2.8 et supérieur.

si vous souhaitez activer par défaut les 1ère et 2ème cases

class MyFormType1 extends AbstractType
{
    CONST FIELD_CHOICES = [
        'Option 1' => 'option_1',
        'Option 2' => 'option_2',
        'Option 3' => 'option_3',
        'Option 4' => 'option_4',
        'Option 5' => 'option_5',
    ];

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

        $this->addSettingsField('my_checkbox_field', ChoiceType::class, [
            'label'    => 'My multiple checkbox field',
            'choices'  => self::FIELD_CHOICES,
            'expanded' => true,
            'multiple' => true,
            'data'     => empty($builder->getData()) ? ['option_1', 'option_2'] : $builder->getData(),
        ]);

    }
}

si vous souhaitez activer toutes les cases par défaut

class MyFormType2 extends AbstractType
{
    CONST FIELD_CHOICES = [
        'Option 1' => 'option_1',
        'Option 2' => 'option_2',
        'Option 3' => 'option_3',
        'Option 4' => 'option_4',
        'Option 5' => 'option_5',
    ];

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

        $this->addSettingsField('my_checkbox_field', ChoiceType::class, [
            'label'    => 'My multiple checkbox field',
            'choices'  => self::FIELD_CHOICES,
            'expanded' => true,
            'multiple' => true,
            'data'     => empty($builder->getData()) ? array_values(self::FIELD_CHOICES) : $builder->getData(),
        ]);

    }
}
0
Zoltán Süle