【发布时间】:2018-10-04 15:24:45
【问题描述】:
剧透警告:多年来,这个问题已被多次提出,但到目前为止我还没有看到任何可行的解决方案。以here 为例
我正在开发一个基于 Symfony 2.8 版本的应用程序。
我有一个带有布尔值的实体,我用 CheckboxType 映射到 formType。
我需要的是:
- 如果这是一个新实体,则选中复选框
- 如果用户取消选中复选框,然后坚持,我希望取消选中复选框
- 如果我在用户选中复选框的情况下重新打开表单,那么 坚持,如果我重新打开表单,我希望选中复选框
这就是说,我已经尝试了许多针对主题提出的“解决方案”
1) 在实体中
我已将我的布尔属性设置为 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,
])
}
默认情况下它会选中复选框,但如果用户取消选中复选框并保留,重新加载的表单仍然显示复选框已选中,即使持久状态未选中 => FAIL 这是预期的in the docs
由于这个实体不是主表单实体:一个子表单(在一个集合中),我还尝试在 CheckboxType 中将compound attribute 设置为 true,但没有任何效果。
3) 实例化表单时在控制器中设置值
这是不可能的选项,因为复选框不在主实体/表单类型中
=>我的方法
到目前为止,我发现的唯一“工作解决方案”是在使用 javascript 添加此集合的新块时选中复选框:
$(element).prop('checked', true)
这不是最佳的......
对于 SF >=2.8(2.8 是我的版本)你有解决方案吗? Symfony 方面的解决方案。
【问题讨论】:
-
您在尝试解决方案 1 时是否更新了数据库?在我的项目中,它运行良好。
标签: javascript symfony checkbox