如何使用symfony2表单生成器呈现默认选中的复选框?

mad*_*adc 18 checkbox formbuilder symfony

我没有找到任何简单的方法来完成,默认情况下只需检查一个复选框.那可不是那么难,所以我错过了什么?

小智 35

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

$builder->add('isPublic', 'checkbox', array(
    'attr' => array('checked'   => 'checked'),
));
Run Code Online (Sandbox Code Playgroud)

  • 那很有意思.您告诉symfony将checked ="checked"添加到复选框的属性,而不是告诉symfony复选框的值为true,因此它应该添加checked ="checked"本身. (3认同)
  • 如果您想使用表单来编辑实体,也无法工作.值"false"仍将具有"已检查"属性.Sgoettschkes的解决方案更好 (3认同)

Sgo*_*kes 19

您只需将模型或实体中的值设置为true,然后将其传递给FormBuilder,然后检查它.

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

创建一个新任务,然后执行setTask并将此任务添加到FormBuilder.如果您对复选框执行相同操作

$object->setCheckboxValue(true);
Run Code Online (Sandbox Code Playgroud)

并传递对象,您应该看到复选框已选中.

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

  • +1 - 另一种方式,如果`true/checked`是任何新实体的默认值,只需在`__construct()`-method中设置值,如:`public function __construct(){$ this-> attribute =真; }`. (4认同)

Let*_*eto 19

在Symfony> = 2.3中,"property_path"变为"已映射".

所以:

$builder->add('checkboxName', 'checkbox', array('mapped' => false,
    'label' => 'customLabel',
    'data' => true, // Default checked
));
Run Code Online (Sandbox Code Playgroud)


lac*_*c10 15

设置'data'选项对我有用.我正在创建一个非实体形式:

$builder->add('isRated','checkbox', array(
    'data' => true
));
Run Code Online (Sandbox Code Playgroud)

  • 在Symfony 2.8中,如果模型在创建表单时具有显式的false值,则此方法无效.仍然会选中该复选框. (2认同)

Mic*_*ick 9

在TWIG

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

{{ form_widget(form.fieldName, { 'attr': {'checked': 'checked'} }) }}
Run Code Online (Sandbox Code Playgroud)

  • 这样,复选框无法取消选中 (3认同)

eDo*_*DoV 5

使用 FormBuilder:: setData () 方法:

$builder->add('fieldName', 'checkbox', array('property_path' => false));
$builder->get('fieldName')->setData( true );
Run Code Online (Sandbox Code Playgroud)

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

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


Gau*_*ier 5

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

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

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