Symfony复选框默认情况下处于选中状态,但在持久化后未选中则未选中

时间:2018-10-04 15:24:45

标签: javascript symfony checkbox

扰流板警报:多年来,这个问题已经被问了很多遍了,但是我还没有发现任何可行的解决方案。例如here

我正在开发基于Symfony 2.8版本的应用程序。

我有一个带有布尔值的实体,我使用CheckboxType映射到formType中。

我需要的是:

  • 如果这是一个新实体,则选中该复选框
  • 如果用户未选中该复选框,然后仍然存在,则我希望该复选框未选中
  • 如果用户已选中复选框,则如果我重新打开表单,则 持续存在,如果我重新打开表单,我希望复选框已选中

这就是说,我已经尝试过针对这些主题提出的许多“解决方案”

1)在实体中

我已将boolean属性设置为true => FAIL:默认未选中此复选框

class MyEntity
{
  /**
   * @ORM\Column(name="enabled", type="boolean")
   */
  private $enabled = true;

  public function __construct()
  {
    $this->enabled = true;
  }
}

2)在FormType中

  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder
      ->add('enabled', CheckboxType::class, [
        'required' => false,
        'empty_data' => true,
      ]);
  }

此“ empty_data” => true(或“ empty_data” => 1或其他)“部分”有效: 持久性之后,它会显示正确的复选框状态,但默认情况下不会选中该复选框=> FAIL

  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder
      ->add('enabled', CheckboxType::class, [
        'required' => false,
        'data' => true,
      ])
  }

它会默认检查复选框,但如果用户取消选中该复选框并保留该复选框,则重新加载的表单仍会显示已选中的复选框,即使未选中保留状态也是如此=>失败 如in the docs

所述

由于该实体不是主要的表单实体:子表单(在Collection中),所以我还尝试在CheckboxType中将compound attribute设置为true,这没有任何效果。 / p>

3)实例化表格时在控制器中设置值

这是不可能的选择,因为该复选框不在主Entity / FormType中

=>我的方法

到目前为止,我发现的唯一“有效解决方案”是使用javascript添加此收藏夹的新块时选中此复选框:

$(element).prop('checked', true)

这不是最佳选择...

您是否有SF> = 2.8(2.8是我的版本)的解决方案?解决方案是Symfony方面。

1 个答案:

答案 0 :(得分:0)

 $builder->add('enabled', CheckboxType::class, array(
        'attr' => array('checked' => 'checked'),
    ));

别忘了在持久之前将其设置为true:

$obj->setCheckboxValue(true);