Symfony 2 支持部分表单绑定吗?

2024-01-01

我的问题:

  1. Symfony 2 支持吗PATCH请求,或任何类型的partial表单内容提交?如果是这样,是否有“正确”(或更准确地说“首选”)方法来做到这一点?

  2. 除了PRE_BIND(见下文)事件方法,还有其他模式或方法来解决这个问题吗?如果有其他方法可以解决这个问题,其中是否有任何方法被认为比其他方法更好或更差?

到目前为止我发现/所做的:根据 Github 上的拉取请求(#5576 https://github.com/symfony/symfony/pull/5576),已经完成了支持 Symfony 2 中的部分表单绑定的工作(根据我的理解,针对 Symfony 2.2)。但是,我在该拉取请求之外找不到任何指示如何使用部分表单绑定的文档或示例。

我发现的一种解决方案可能适合我的目的。该方法是将事件订阅者附加到PRE_BIND对于表单类型的事件,粗略搜索 stackoverflow 得到了以下答案,该答案与我当前正在使用的答案类似:https://stackoverflow.com/a/11687863/657674 https://stackoverflow.com/a/11687863/657674.


For PATCH请求,Symfony 2.3(也许更早?)本身支持部分模型更新。请参阅下面的解释。

For non-PATCH请求(例如PUT and POST),您仍然可以通过创建和注册事件订阅者来将未提交的数据操作为其原始值来执行部分数据绑定,或者您可以编写自定义请求处理程序以始终调用$form->submit()方法与$clearMissing set to false.

处理部分绑定PATCH要求

在深入研究 Symfony 的内部结构并更好地了解事件订阅者和表单扩展之后,我偶然发现了HttpFoundationRequestHandler班级。基本上,从 Symfony 2.3 开始,不再调用$form->submit($request)绑定表单提交的数据时,开发人员应该调用$form->handleRequest($request);这会调用附加的请求处理程序(默认情况下HttpFoundationRequestHandler)。请求处理程序做了一些事情,但最重要的是它如何调用$form->submit()。它传递的值为false进入表格的submitmethod 如果请求方法是PATCH告诉形式not将未提供的表单数据绑定为null values.

使用时有一些注意事项PATCHSymfony 2.3 中的方法可以通过 Symfony 文档进一步解释:

如何在路由中使用 GET 和 POST 之外的 HTTP 方法 http://symfony.com/doc/master/cookbook/routing/method_parameters.html:

“不幸的是,生活并没有这么简单,因为大多数浏览器不支持发送 PUT 和 DELETE 请求。幸运的是,Symfony2 为您提供了一种解决此限制的简单方法。通过在查询字符串或参数中包含 _method 参数HTTP请求,Symfony2在匹配路由时会使用这个方法。”

上面引用 Symfony 文档解释了大多数浏览器不支持发送PUT, PATCH, or DELETE要求。这是一个问题,因为我们要利用 Symfony 对部分表单更新的本机支持,我们需要使用PATCH要求。然而,Symfony 对此提供了答案。文档告诉我们,我们可以使用_method参数或表单值来欺骗我们想要的实际请求,Symfony 会确切地知道我们的意思。为了_method不过,为了理解,您可能必须启用http_method_override配置选项,例如:

# config.yml
framework:
    http_method_override: true
    ...

还有其他方法告诉 Symfony 表单应该使用什么方法,可以在这里找到:更改表单的操作和方法 http://symfony.com/doc/master/book/forms.html#changing-the-action-and-method-of-a-form.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony 2 支持部分表单绑定吗? 的相关文章

  • C++ 中是否有与 PHP 的explode() 函数等效的函数? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中分割字符串 https stackoverflow com questions 236129 splitting a string in c 在 PHP 中 explode 函数将获取一个字
  • HTML 表单似乎同时提交*POST 和 GET?

    这不是诸如此类的问题的重复this https stackoverflow com questions 4726809 send both post and get in a form 而是相反 我有一个通过 jQuery 提交的表单
  • 如何使用 WhatsAPI 官方在 PHP 中从 WhatsApp 发送消息?

    我正在尝试使用 WhatsApi 官方库通过 WhatsApp 从 php 文件发送消息 我已经将库移到了我的 Apache Web 服务器中的一个文件夹中 调用测试 如下所示 文件whatsapp php 是这样的
  • PHP 日期时间 当前时间 添加分钟

    简单的问题 但这正在消磨我的时间 有什么简单的解决方案可以用 GMT 8 在 php 中向当前时间添加 30 分钟吗 我认为最好也是最简单的解决方案之一是 date Y m d strtotime 30 minutes 也许它不是最有效的
  • 检查文件是否要上传?代码点火器

    我有一个带有很少输入和一个文件输入的表单 我想检查文件输入是否为空 如果为空则不要尝试上传 如果不是则尝试上传 我尝试过这样的事情 upld file this gt upload gt data if empty upld file Up
  • PHP:调用另一个类的方法

    我仍在学习 OOP 所以这甚至可能是不可能的 尽管如果是这样我会感到惊讶 我需要一些帮助来调用另一个类方法 例如在ClassA I有这个方法 function getName return this gt name 现在从ClassB 不同
  • FOSUserBundle 强制用户写入不同的密码

    我有一个使用 FOSUSerBundle 在 Symfony2 0 上运行的应用程序 连接该应用程序的用户每 3 个月必须更改一次密码 密码已就位且正在运行 今天 如果用户每 3 个月写入与前一个密码相同的新密码 则无需验证 他还可以使用该
  • PHP Web 应用程序中的 Ace 编辑器

    我正在制作一个小型网络应用程序 允许用户通过以下方式提交 html css 和 javascript 内容王牌编辑器 http ace ajax org 在此编辑器中 将存储的内容回显到编辑器中就足够了 但是无论如何我找不到将用户输入提交到
  • 如何在 laravel eloquent 中保存布尔值

    我在 Laravel 中进行了以下迁移
  • Zend Framework - 需要从视图访问 GET 参数

    我正在使用 Zend 框架 我需要的是在我的视图中构造一个 url 通常 在常规 php 代码中 我只需使用全局 GET 获取 GET 变量 然而 对于 Zend 我将其设置为清理 URI 如下所示 ac 列表 过滤器 作品 页面 2 好像
  • HTML 实体到 PHP 中的普通字符串

    我有一个 PHP 中包含 HTML 实体的字符串 在 html 源中我可以看到 html 实体 但在输出中我的字符串没有 html 实体 like HTML 源代码 a href google com Me nbsp You a 我该如何更
  • 地理位置邻近搜索

    应用程序中有一个要求 要求在谷歌地图中找出与特定国家和 或城市绑定的所有对象 我们使用谷歌地图 API 预先计算了具有各自纬度和经度的对象并将其存储在数据库中 有时 这些对象在它们可以提供服务的特定服务范围 半径内提供服务 例如现在的情况就
  • PHP 中如何处理重复的表单输入?

    我有一个通过电子邮件发送 php 脚本的表单 网站的上下文使我有必要在用户单击按钮时添加重复的表单字段 如何正确处理表单输入 例如 我有一个车辆表单 当用户单击 添加车辆 时 我会附加几个车辆表单组的副本 这些表单输入具有相同的 名称 并且
  • 如何在 Laravel 中将秒转换为天小时分钟[重复]

    这个问题在这里已经有答案了 我想将以秒为单位的时间间隔转换为天小时分钟 我已经尝试过了 value 90060 CarbonInterval seconds value gt forHumans 我得到了输出 90060 seconds 我
  • PHP:从字符串中修剪子字符串的最佳方法

    想要处理一组字符串 并修剪一些结尾 myEnding 从最后每个字符串的如果存在的话 最简单的方法是什么 我知道使用正则表达式一切皆有可能 但这似乎是一项简单的任务 我想知道是否存在一个简单的工具来实现这一点 Thanks Gidi 我选择
  • 通过 PHP 脚本重新启动 Nginx

    我目前正在努力使我的 WordPress 插件与 nginx 兼容 该插件需要访问 conf文件在wp content uploads目录 以便它可以添加所需的规则 目前 它更新了 htaccess文件位于同一目录中 更改立即生效 无需干预
  • 如何准备更新查询语句? [复制]

    这个问题在这里已经有答案了 我有一个 mysqli 查询 代码如下 db usag gt query UPDATE Applicant SET phone number phone number street name street nam
  • 在 django 表单中设置下拉菜单的默认值

    我无法在加载表单时设置下拉菜单的默认值 这是代码 state forms TypedChoiceField choices formfields State State QC APPROVED QC APPROVED REVERT REVE
  • 我如何加入 Eloquent:关系?

    我的查询是这样的
  • Paypal Rest API - 来自批准 URL 的令牌生命周期

    我使用 Paypal Rest API 我的问题是 有多长token来自批准 URL 有效吗 我想将此令牌 也包含我的令牌 存储到数据库并生成带有我的令牌的链接 稍后 如果我单击此链接 将我的令牌替换为 paypal 令牌 我想重定向到 p

随机推荐

  • 为 Pong 游戏创建 AI + 对速度算法的基本了解

    我正在为我的软件开发课程制作一个乒乓球游戏 我可能应该说这是家庭作业 因此我的理解有限 我在为 NPC 桨创建 AI 时遇到一些问题 我正在使用 Kivy 和 Python 目前我可以创建不可能被击败人工智能通过这样做 ai self pl
  • CSS 主体背景图像即使在放大/缩小时也固定为全屏

    我正在尝试用 CSS 来实现这样的目标 我想将身体背景图像固定在全屏上 这是通过以下代码完成的 body background url img beach jpg no repeat fixed 100 100 现在我可以验证窗口确实充满了
  • 蒙面文本框钱

    在 C 中 我使用这个mask 999 999 00 但我需要将数字显示为 123 123 12 如果我想输入 99 00 我需要执行 000099 00 我不想这样做 如果我使用这个 99 00 我无法给出 100 00 美元的数字 我怎
  • 在 ng-repeat 之后运行的指令

    我也有类似的问题ng repeat 完成后调用函数 https stackoverflow com questions 15207788 calling a function when ng repeat has finished但我里面有
  • iOS 9.0,Xamarin Studio,“正在等待调试器连接...”

    我一直在使用Xamarin iOS成功地使用带有 iOS 8 3 模拟器的 iPad 平台 直到我用 iOS 9 0 更新了 Xcode 7 当我选择模拟器并运行它时 它不断显示 等待调试器连接 最后什么也没有出现 有什么解决办法吗 顺便问
  • ANDROID&PHP - 如何使用 PHP 从 MySql 显示 JSONArray

    我用来将表的值显示到下面的 JSONArray 中的代码 send data php
  • Mac 上的 Jupyter 安装失败

    我尝试在 Mac OS X El Capitan 上安装 Jupyter 但收到以下错误消息 sudo pip install U jupyter 起初下载 安装开始正常 但后来我遇到了这个 Installing collected pac
  • 模拟器中的推送通知 - Xcode 11.4beta 不工作

    最近苹果也在模拟器中添加了推送通知 模拟器中未收到我现有的应用程序通知 如何在模拟器中模拟推送通知 模拟器支持模拟远程推送通知 包括后台内容获取通知 参考 https developer apple com documentation xc
  • 使用 CSS 设计 XML 样式时,如何引用包含句点或冒号的标签名称?

    我正在设计一个包含以下标签的 XML 文档
  • 使用 Python 通过 Selenium 设置 chromedriver 代理身份验证

    我正在使用 Python 和 Selenium 库编写一个测试套件 使用 chromedriver 我使用以下方式设置代理 chrome options webdriver ChromeOptions chrome options add
  • Azure 资源标识符格式 URI -URL 或 URN

    我正在使用 Azure 我注意到它为每个资源组和资源创建了一个如下所示的 ID 对于资源组 subscriptions
  • R download.file 使用“wget”方法并指定额外的 wget 选项

    我有一个关于使用的可能相当基本的问题download fileR 中的函数使用wget选项并使用一些 wget 额外选项 但我就是无法让它工作 我想做的 下载一个网页的本地副本 实际上是几个网页 但目前的挑战是让它即使只有 1 个也能工作
  • 导轨联系表不起作用

    我正在尝试创建一个提交表单的联系人 但我没有收到任何电子邮件 在我的 config application rb 中我添加了 config action mailer raise delivery errors true config ac
  • AngularJS 向路由添加授权

    如何向 AngularJS 和 ui router 添加授权 我正在使用 modulg ng oauthhttps github com andreareginato oauth ng https github com andrearegi
  • Linq 查询具有分组依据

    RowNum IMAGEID SCANEDATE COUNT 1 10000131 2012 07 04 00 00 00 000 1 2 10002626 2012 08 03 00 00 00 000 1 3 10003348 2012
  • React:ref 不是 prop

    使用 React js 时 为什么我得到 ref is not a prop key is not a prop error Notes 但是我在使用 webpack dev server 运行时没有遇到此错误 我没有ref or key在
  • 使用字符串作为函数参数

    我确信这很简单 但我找不到解决方案 我想使用包含字符串的变量作为函数的参数 x lt c 1 10 myoptions lt trim 0 na rm FALSE 现在 像 foo lt mean x myoptions 应该是一样的 fo
  • git 撤消受保护分支上的提交?

    有没有办法撤消受保护分支上的提交 我的意思是 如果您推送了错误的提交 在非受保护的分支上 您可以将 HEAD 重置为最后一个所需的提交 或者恢复错误的提交并强制推送 从而撤消它 但受保护的分支不允许强制推送 对于这种情况 有什么方法可以解决
  • 如何确定寄存器是否从右到左加载,反之亦然

    在查看 gdb 输出并查看汇编调用时 通常我可以找到一个使用硬编码值的命令来确定寄存器是否从右到左加载 反之亦然 通常类似于以下内容 sub rsp 16 or sub 16 rsp 但其他时候 没有像上面这样的值可见 我所看到的都是类似以
  • Symfony 2 支持部分表单绑定吗?

    我的问题 Symfony 2 支持吗PATCH请求 或任何类型的partial表单内容提交 如果是这样 是否有 正确 或更准确地说 首选 方法来做到这一点 除了PRE BIND 见下文 事件方法 还有其他模式或方法来解决这个问题吗 如果有其