How to render a checkbox that is checked by default with the symfony2 Form Builder?

后端 未结 13 2141
鱼传尺愫
鱼传尺愫 2020-12-17 09:30

I have not found any easy way to accomplish to simply check a Checkbox by default. That can not be that hard, so what am i missing?

相关标签:
13条回答
  • 2020-12-17 10:07
    UserBundle\Entity\User
    

    let's assume that you have an entity called ( User ) and it has a member named isActive, You can set the checkbox to be checked by default by setting up isActive to 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);
    
    0 讨论(0)
  • 2020-12-17 10:07

    This is how you can define the default values for multiple and expanded checkbox fields. Tested in Symfony4, but it has to work with Symfony 2.8 and above.

    if you want to active the 1st and the 2nd checkboxes by default

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

    if you want to active every checkbox by default

    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 讨论(0)
  • 2020-12-17 10:08

    You would simply set the value in your model or entity to true and than pass it to the FormBuilder then it should be checked.

    If you have a look at the first example in the documentation:

    A new task is created, then setTask is executed and this task is added to the FormBuilder. If you do the same thing with your checkbox

    $object->setCheckboxValue(true);
    

    and pass the object you should see the checkbox checked.

    If it's not working as expected, please get back with some sample code reproducing the error.

    0 讨论(0)
  • 2020-12-17 10:08

    This works as well, but aware of persistent "checked" state

    $builder->add('isPublic', 'checkbox', array(
        'empty_data' => 'on',
    ));
    
    0 讨论(0)
  • 2020-12-17 10:10

    You can also just set the attr attribute in the form builder buildForm method:

    $builder->add('isPublic', 'checkbox', array(
        'attr' => array('checked'   => 'checked'),
    ));
    
    0 讨论(0)
  • 2020-12-17 10:11

    In Symfony >= 2.3 "property_path" became "mapped".

    So:

    $builder->add('checkboxName', 'checkbox', array('mapped' => false,
        'label' => 'customLabel',
        'data' => true, // Default checked
    ));
    
    0 讨论(0)
提交回复
热议问题