没有考虑Symfony2表单未选中的复选框,为什么?

银刺

当我发送带有未选中复选框的表单时,如果相关实体属性等于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方法由请求处理程序通过以下行调用:

$form->submit($data, 'PATCH' !== $method);

结果Form::submit $clearMissingfalse在PATCH请求的情况下,参数设置为,从而使未发送字段保持其旧值。

但是我不知道如何解决这个问题。如果{secret: false}在未选中复选框的情况下将JSON显式传递给Symfony框架,它将把它解释为"false"字符串,并认为该值为真值,因此考虑了选中的复选框...


注意 对于使用choice链接到Doctrine Simple Array属性字段类型(带有multipleextendedtrue的复选框数组,我遇到完全相同的问题:一旦给定的复选框被发送一次,一旦被检查,就无法回退相关属性到false随后unchecked提交。

银刺

发生此问题的原因是使用PATCH请求提交了表单

这导致打开了此Symfony问题

如所解释的,一种解决方法是在未选中复选框时显式发送特定的保留值(例如字符串'__false')(而不是不发送任何内容),并使用以下格式的自定义数据转换器将其替换为'null'类型:

// MyEntityFormType.php -- buildForm method
$builder->add('mycheckbox', ...);
$builder->get('mycheckbox')
    ->addViewTransformer(new CallbackTransformer(
        function ($normalizedFormat) {
            return $normalizedFormat;
        },
        function ($submittedFormat) {
            return ( $submittedFormat === '__false' ) ? null : $submittedFormat;
        }
    ));

带有“选择”字段的情况无法以相同的方式解决。这实际上是Symfony的一个错误,已在本期中解决

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么没有选中复选框反应?

选中的复选框未选中。为什么?

为什么在循环并使用jquery取消选中复选框时,复选框没有被取消选中?

为什么在发布表单时忽略未选中的复选框?

表单复选框。未选中

为什么将具有不确定状态的复选框更改为未选中状态?

为什么 jQuery 没有看到复选框已被自动选中?

为什么detectChanges()之后复选框选中的属性没有更改

为什么我的复选框在保存后没有被选中?

没有选中属性的复选框

在 CodenameOne 中,为什么未选中复选框但出现选中状态?

选中时,为什么复选框属性显示为“ false”(未选中)?

如何设置未选中的复选框1选中复选框2并设置未选中的复选框2使用脚本选中复选框1时?

为什么在单击另一个复选框时未选中我的复选框?(Vue,CSS)

为什么不选中和取消选中复选框?

jQuery为什么不选中/取消选中复选框

当我向其中传递正确的数据时,为什么我的复选框没有被选中?

为什么这段代码没有隐藏复选框?

为什么标志没有从复选框中消失?

复选框未选中

如果未选中任何复选框,则阻止提交表单

在浏览器中加载SSRS报告时,未选中空复选框。为什么?

为什么此javascript复选框始终保持未选中状态?

tkinter:为什么默认情况下未选中我的复选框?

选中的复选框未选中

Symfony2:在Bootstrap布局下为复选框设置表单标签

symfony2表单复选框已分组(扩展和多项选择)

如何发送所有复选框(在表单提交时处于选中状态还是未选中状态)?

选中FormArray-Angular 2反应性表单中的所有复选框