【发布时间】:2016-05-31 21:20:01
【问题描述】:
当我发送带有未选中复选框的表单时,如果相关实体属性等于true,则它不会更改为false。
反之亦然(在发送带有选中复选框的表单时将属性设置为 true)工作正常,以及保存其他字段的所有表单。
这是我如何构建表单并声明相关属性:
// --- Form creation function EntityType::buildForm() ---
$builder->add('secret', 'checkbox', array( 'required' => false ));
// --- Entity related property, Entity.php file ---
/** @ORM\Column(name="secret", type="boolean") */
protected $secret;
编辑:出现问题是因为表单是使用 PATCH 请求提交的。
在 Symfony 中,Form::submit 方法由 Request Handler 使用以下代码行调用:
$form->submit($data, 'PATCH' !== $method);
因此,在 PATCH 请求的情况下,Form::submit$clearMissing 参数设置为 false,从而将未发送的字段保留为旧值。
但是我不知道如何解决这个问题。如果我在未选中复选框时明确地将 JSON {secret: false} 传递给 Symfony 框架,它将把它解释为 "false" 字符串并认为这是一个真值,因此考虑选中复选框...
注意。我有完全相同的问题使用choice 字段类型的复选框数组(使用multiple 和extended 到true)链接到Doctrine Simple Array 属性:尽快给定的复选框已被发送一次,因此无法将相关属性设置回 false 以及随后的 unchecked 提交。
【问题讨论】: