23

我还没有找到任何简单的方法来完成默认情况下简单地选中复选框。那不可能那么难,所以我错过了什么?

4

13 回答 13

44

您也可以在表单构建器 buildForm 方法中设置 attr 属性:

$builder->add('isPublic', CheckboxType::class, array(
    'attr' => array('checked'   => 'checked'),
));
于 2012-06-11T09:25:36.467 回答
23

在 Symfony >= 2.3 中,“property_path”变成了“映射”。

所以:

$builder->add('checkboxName', 'checkbox', array('mapped' => false,
    'label' => 'customLabel',
    'data' => true, // Default checked
));
于 2013-08-12T12:40:52.827 回答
20

您只需将模型或实体中的值设置为 true,然后将其传递给 FormBuilder,然后应该对其进行检查。

如果您查看文档中的第一个示例:

创建一个新任务,然后执行 setTask 并将此任务添加到 FormBuilder。如果你用你的复选框做同样的事情

$object->setCheckboxValue(true);

并传递您应该看到复选框已选中的对象。

如果它没有按预期工作,请返回一些重现错误的示例代码。

于 2012-03-06T12:55:17.450 回答
15

设置'data'选项对我有用。我正在创建一个非基于实体的表单:

$builder->add('isRated','checkbox', array(
    'data' => true
));
于 2013-02-21T16:04:02.990 回答
10

在枝杈

如果您希望直接在模板中执行此操作:

{{ form_widget(form.fieldName, { 'attr': {'checked': 'checked'} }) }}
于 2013-01-16T05:18:03.907 回答
5

使用 FormBuilder:: setData () 方法:

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

"property_path" 为 false,因为这是一个非实体字段(否则,您应该使用实体设置器将默认值设置为 true)。

默认情况下将选中复选框。

于 2012-06-19T14:28:39.303 回答
3

要完成先前的答案,您可以使用多个字段来检查所有选项:

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

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

于 2018-01-23T15:21:12.453 回答
2

在将实体显示在表单上之前,您应该对存储实体的临时对象进行更改。类似下一个:

<?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
            ));
    }
}
于 2014-01-23T17:19:36.003 回答
1

根据文档: http ://symfony.com/doc/current/reference/forms/types/checkbox.html#value

要默认选中复选框或单选按钮,请使用 data 选项。

于 2015-01-24T14:25:00.497 回答
1
UserBundle\Entity\User

假设您有一个名为 ( User ) 的实体,并且它有一个名为 isActive 的成员,您可以通过将 isActive 设置为 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);
于 2015-08-08T18:22:55.550 回答
1

我和你有同样的问题,这是我找到的唯一解决方案:

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
    $entity= $event->getData();
    $form = $event->getForm();
    $form->add('active', CheckboxType::class, [
        'data' => is_null($entity) ? true : $entity->isActive(),
    ]);
});
于 2020-07-24T07:44:26.517 回答
0

这也有效,但要知道持久的“已检查”状态

$builder->add('isPublic', 'checkbox', array(
    'empty_data' => 'on',
));
于 2013-12-02T13:58:23.797 回答
0

这是您可以为多个和扩展的复选框字段定义默认值的方式。在 Symfony4 中测试,但它必须与 Symfony 2.8 及更高版本一起使用。

如果您想默认激活第一个和第二个复选框

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

    }
}

如果你想默认激活每个复选框

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

    }
}
于 2019-02-27T15:29:51.830 回答