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

2023-12-24

当我发送带有未经检查的复选框,如果相关实体属性等于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意见书。


上述都没有帮助我。 所以,我正在使用这个...

解释

使用“PATCH”方法时此问题的解决方案是在表单类型内添加额外的隐藏“时间戳”字段,并将其放在 twig 文件中问题的复选框旁边。这需要与复选框一起传递一些东西,这肯定会改变 - 时间戳会改变。

接下来的事情是使用 PRE_SUBMIT 事件并等待表单字段到达,如果未设置,我会手动设置它......工作正常,我不介意额外的代码......

FormType

$builder
...
->add('some_checkbox')
->add('time_stamp', 'hidden', ['mapped' => false, 'data' => time()])
...

Twig

{{ form_widget(form.time_stamp) }}
{{ form_widget(form.some_checkbox) }}

构建器中的 PRE_SUBMIT 事件

$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use($options) {

    $data = $event->getData();
    $form = $event->getForm();

    if (!$data) {
        return;
    }
    /* Note that PATCH method is added as an option for "createForm" 
     * method, inside of your controller 
    */       
    if ($options["method"]=="PATCH" && !isset($data['some_checkbox'])) {
        $form->getData()->setSomeCheckbox(false);//adding missing checkbox, since it didn't arrive through submit.. grrr
    }            
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony2 表单未选中的复选框未考虑在内,为什么? 的相关文章

  • 有没有办法调用 VBA(MS Access 2002 或 2003)中任何控件的 BeforeUpdate 事件过程?

    在 VBA 中 我正在更改 Access 表单中的一些控件的值 我喜欢在执行此操作后运行这些控件的 BeforeUpdate 事件 因为它会检查字段之间的一致性 Private Sub ExampleProc1 Dim intCancel
  • Twig:如何获取字符串中的第一个字符

    我正在实施按字母顺序搜索 我们显示一个名称表 我只想突出显示那些名称以相应字母开头的字母 我被一个简单的问题难住了 如何读取 twig 中字符串 user name 的第一个字符 我尝试了多种策略 包括 0 操作 但它抛出异常 这是代码 f
  • 如何将一个表单的文件上传字段中的值复制到另一个表单的文本字段?

    我有一页上有两种不同的表格 第一个表单允许用户上传图像文件并通过电子邮件发送 第二个表单根据用户输入生成 URL 为了将图像名称添加到 URL 我需要在第二个表单中有一个字段 该字段从第一个表单的字段中复制图像名称 我不想让用户浏览并选择图
  • 在非持久字段更改上保留实体

    我有一个具有 plainPassword 和密码属性的实体 在表单中 我映射到 plainPassword 之后 当用户验证表单时 我对 plainPassword 进行密码验证 为了对密码进行编码 我使用了监听 prePersist 和
  • 如何在 Symfony 4 中为测试环境设置数据库

    我对如何在 symfony 4 中为测试环境设置数据库感到困惑 我曾经在配置测试 ymlsymfony 3 及以下版本中的文件 最佳做法是什么 我应该重新创建一个学说 yaml文件输入配置 包 测试 该文档提到如何通过编辑 phpunit
  • 由于继承抽象类而禁用设计器?

    我有一个项目的解决方案 那个项目中有 40 或 50 种形式 我制作了 4 个基本形式 所有其他形式都可以继承 所有 4 个基本表单都继承 System Windows Forms Form 几乎 90 的形式继承了前 2 个基本形式之一
  • Doctrine 装置如何覆盖 purger 类?

    From doctrine fixture bundle the console doctrine fixtures load n命令定义如下 https github com doctrine DoctrineFixturesBundle
  • 使用 keyup 上的 Submit() 提交表单两次

    我有一个与此类似的 jQuery HTML 代码
  • 如何从子窗体访问winforms父窗体控件

    在 Form1 中 我有一个 DataGridView 和多个文本框 当我单击 Form2 中的 A 按钮时 我需要将 DataGridView 和多个文本框中的数据保存到数据库中 如何在C Sharp Windows应用程序中实现 For
  • PHP 文件上传帮助

    div align center div 这是我的代码
  • 具有动态表单名称的 form_widget

    在我的 Twig 模板中 我有一个 FOR 循环 它创建多个表单 如下所示 for thing in things set form id myform thing Id set form name attribute form myfor
  • Symfony2中如何获取所有post参数? [复制]

    这个问题在这里已经有答案了 我想获取a的所有post参数symfony http symfony com Form I used all parameter this gt get request gt getParameterHolder
  • php 表单提交 - Q2

    我对这个虚拟问题感到抱歉 这是我的简单 PHP 表单 其中包含两个 SQL 表和 ADD 提交 按钮 我希望将人员从 Test1 转移到 Test2 很多事情都很好 只有提交按钮不起作用 因此 Test2 表没有反馈 Revised 现在提
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • Symfony2 自定义密码编码器(bcrypt)

    我已经编写了自己的密码编码器 它实现了PasswordEncoderInterface class BCryptPasswordEncoder implements PasswordEncoderInterface protected en
  • 选择框属性更改时未触发 Webkit Mutation Observer 回调

    我正在尝试监视选择框 或嵌套的option元素 与新的变异观察者 http updates html5rocks com 2012 02 Detect DOM changes with Mutation Observers功能 然而 只有
  • symfony easyadmin 自定义表单生成器

    我使用 symfony 3 4 和 easycorp easyadmin bundle 1 17 配置表单 easyadmin form fields type group label Basic Information icon enve
  • Symfony2 条件服务声明

    我目前正在尝试找到一个可靠的解决方案来动态更改 Symfony2 服务的依赖关系 详细信息 我有一个服务 它使用 HTTP 驱动程序与外部 API 进行通信 class myAwesomeService private httpDriver
  • C# Checkedlistbox 如果选中

    是否可以像复选框一样将 Checked 应用于选中列表框 如果以复选框的方式执行此操作 则不起作用 if checkedListBox1 Items 2 Checked true 你需要的是方法GetItemCheckState 用法如下
  • 使用流体网格系统在引导程序上对齐输入

    我正在创建一个表单 要求用户输入他们的姓名和电子邮件地址 表单的第一行对于姓名的每个部分都有两个并排的输入 第二行对于电子邮件地址有一个输入 其宽度应与第一行组合的宽度相同 我正在尝试使用流体网格系统 但无法将第二行与第一行对齐

随机推荐

  • C++ 窗口时间

    我在利用时间方面遇到了问题 我想使用 C 在 Windows 上使用并获取微秒 我找不到路 规范 的答案是由unwind 一种流行的方法是使用 QueryPerformanceCounter 调用 然而 这种方法存在一些问题 它的目的是测量
  • 设计before_filterauthenticate_admin?

    我通过添加管理员属性向 Devise 添加了管理员角色 您能告诉我这是否是创建需要管理员用户签名的 before filter 的正确方法 在任何控制器中 before filter authenticate admin 在应用程序控制器中
  • Apache/httpd /var/www/html/ .cgi 脚本抛出 500 内部服务器错误

    我今天安装了一台新的 CentOS 7 x86 64 LAMP 服务器 我用 c 语言编译了一个简单的 CGI 脚本 并将其命名为 test cgi 并为 cgi 脚本启用了 AddHandler 然而 每次我尝试从 var www htm
  • MySQL、Rails ActiveRecord 日期分组和时区

    我想按创建日期对用户进行计数 当我查询最后一个用户时 我有 gt User last created at gt Thu 07 Aug 2014 21 37 55 BRT 03 00 当我计算每个日期的用户数时 我得到 gt User gr
  • htaccess 仅将主域重写到子文件夹

    我正在使用 cPanel 帐户托管多个站点 为了获得干净的 public html 我使用 htaccess 将主域重定向到子文件夹之一 所以当用户输入www example com 它将被重写为www example com mainsi
  • Express + Angular 路由导致无限循环 + 崩溃

    我正在使用 Express 和 Angular 开发 Node 应用程序 我使用 Angular 进行路由 并且我的路由设置如下 app config routeProvider function routeProvider routePr
  • 如何查找 Wix Burn 可执行文件的 GUID 以便以编程方式卸载?

    我创建了 wix 引导程序项目 安装时会创建注册表项 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows CurrentVersion Uninstall SOME GUID 所以我可以使用 ARP
  • 使用 C# 以编程方式锁定 Windows 工作站

    我遇到了这个锁定 Windows 工作站的示例 using System Runtime InteropServices DllImport user32 dll SetLastError true static extern bool L
  • TCP 序列号

    我试图了解 TCP 标头的序列号是如何生成的 在某些地方我读到它是 数据包中第一个字节的索引 链接在这里 https stackoverflow com questions 2672734 tcp sequence number quest
  • 使用sqlalchemy解析python3中的hstore

    我有一个 csv 文件 其中一列以 hstore 格式编写 我想将它转换为 python 字典 但同时保持我的代码干燥 我的代码库使用 sqlalchemy 它有一个 parse hstore函数定义在https github com sq
  • 根据先前的值添加到列表

    我正在尝试将这个列表组合在一起 输入示例 M1 a 14 a 7 a 16 b 3 b 15 c 22 c 1 c 5 Output a 14 7 16 b 3 15 c 22 1 5 含义将所有 a 值组合在一起 同样适用于 b c 等
  • 为什么 math.acos 会导致 ValueError: math 域错误?

    我正在使用 math acos 函数 math acos 1 0000000000000002 这会引发数学域错误 有人能说出原因吗 我之前计算过这个值 这里这个值给出了错误 但如果我最后删除 2 它不会抛出错误 我不明白这是为什么 See
  • 使用 Maven 构建多架构 SWT 应用程序

    我已经为 SWT 应用程序设置了一个 Maven 项目 该应用程序在多个平台上运行 OS X Windows 64 位 Windows 32 位 Linux 64 位和 Linux 32 位 我已对其进行设置 以便在运行 Maven 时检测
  • 在 django 中为模型创造完整历史的最佳方式是什么?

    如何为模型创造历史 向我显示某个字段中的旧值和新变化的值 在我看来 我认为为具有相同字段的每个模型创建历史模型 并且当用户从第一个模型创建新数据或更新数据时 也转到第二个模型 我搜索了很多这个问题 发现了一个名为 django revers
  • 错误 AndroidManifest.xml 不存在或根标记不正确

    我是使用 Android Studio 进行 Android 应用程序开发的新手 在尝试运行我的应用程序时遇到了此错误 错误 AndroidManifest xml 不存在或根标记不正确 我发现我的 AndroidManifest xml
  • Composer:您的系统中缺少请求的 PHP 扩展 ext-intl *

    我正在尝试使用composer json文件 但是 当我尝试运行命令 composer install in my path project 我收到错误 我已经配置了我的wamp for extension php intl dll 并复制
  • log4net / EventLogAppender 忽略我的 LogName

    此配置应该使我的日志条目最终出现在自定义日志中 对吧 但它最终会出现在应用程序日志中 我的应用程序以管理员身份运行 运行我的应用程序后 我可以确认日志和事件源是通过使用创建的EventLog Exists MyLog and EventLo
  • 谷歌浏览器扩展中的文件“compulated_hashes.json”的用途是什么?

    在一些谷歌浏览器扩展中 有一个computed hashes json文件 我没有找到任何有关该文件的文档 因此 如果我能得到一些解释 那就太好了 以下是该文件的摘录 file hashes block hashes THf ne1nArt
  • 通常禁用矩阵降维?

    众所周知 如果列维或行维为 1 R 会尝试将矩阵简化为向量 可以通过使用drop F命令 然而 我目前正在编写一个大型 R 包 并且需要在代码中数百次禁用维度下降 因此我必须手动找到这些位置并添加drop F数百次 因此 我想知道是否有任何
  • Symfony2 表单未选中的复选框未考虑在内,为什么?

    当我发送带有未经检查的复选框 如果相关实体属性等于true 那么它不会改变为false 反之亦然 当发送带有选中复选框的表单时将属性设置为 true 效果很好 并且保存的所有表单其他字段也可以正常工作 以下是我构建表单并声明相关属性的方法