扰流板警报:多年来,这个问题已经被问了很多遍了,但是我还没有发现任何可行的解决方案。例如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方面。
答案 0 :(得分:0)
$builder->add('enabled', CheckboxType::class, array(
'attr' => array('checked' => 'checked'),
));
别忘了在持久之前将其设置为true:
$obj->setCheckboxValue(true);