当我发送带有未经检查的复选框,如果相关实体属性等于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;
EDIT: 出现此问题的原因是表单是使用以下方式提交的PATCH 请求.
在 Symfony 中,Form::submit
方法由请求处理程序使用以下行调用:
$form->submit($data, 'PATCH' !== $method);
结果是Form::submit
$clearMissing
参数设置为false
在 PATCH 请求的情况下,从而将未发送的字段保留为其旧值。
但我不知道如何解决这个问题。如果我显式传递 JSON{secret: false}
当未选中该复选框时,Symfony 框架会将其解释为"false"
字符串并认为这是一个真实值,因此考虑选中的复选框...
注意。我有完全相同的问题带有一系列复选框,使用choice
字段类型 (with multiple
and extended
to true
)链接到 Doctrine Simple Array 属性:一旦给定的复选框被选中一次,就不可能将相关属性设置回false
与随后的unchecked
意见书。