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 支持部分表单绑定吗? 的相关文章

  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • CodeIgniter 自定义库未加载

    我是 CodeIgniter 的新手 并尝试用它开发一个相当简单的应用程序 只是一个用于处理想要娱乐中心通行证的员工的注册的表单 我正在尝试将事物分开以使它们更清晰 这是代码 应用程序 控制器 reccenter php class Rec
  • 在服务器上找不到本地主机或 phpMyAdmin:如何修复?

    我按照安装说明进行操作PHP MySQL and PHPMyAdmin 但是当我尝试访问时http localhost phpmyadmin 我收到此错误 未找到 在此找不到请求的 URL phpmyadmin 服务器 然后我尝试访问loc
  • 获取 YouTube 最高缩略图分辨率

    我想获得 youtube 最高缩略图 maxresdefault jpg 像这个 http i ytimg com vi Cj6ho1 G6tw maxresdefault jpg http i ytimg com vi Cj6ho1 G6
  • 无法访问 localhost/xampp/index.php

    我刚刚安装了 Windows 7 的 XAMPP 控制面板似乎工作正常 我启动了 MySql 和 Apache 我遇到的问题是 当我在浏览器 Google Chrome 中输入 localhost 时 它会将我发送到 http localh
  • Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit 未触发

    我花了几个小时来解决这个问题 但毫无结果 编辑 找到解决方案 参见我的答案 项目背景 我正在构建一个项目Symfony2 这需要一个用于上传大文件的模块 我选择了Node js and Socket IO 我必须从头开始学习 所以我可能会错
  • PHP MongoDb 驱动程序:如何设置执行代码的超时

    我有以下代码 它在 MongoDb 端执行一段代码 mongoCode new MongoCode Some JS code db gt execute mongoCode array socketTimeoutMS gt 1000000
  • 使用 Dojo 富文本编辑器提交表单

    有人知道如何提交包含 Dojo 富文本编辑器的表单吗 我尝试将 name 属性添加到用 dojoType dijit Editor 装饰的元素中 但是 我在接收过程中没有看到任何 HTML 我已经检查了文档 但没有看到任何明确的示例 除了将
  • AWS-PHP-SDK / SNS 直接寻址返回错误

    您好 我正在使用 Laravel 4 设置来利用 AWS SNS 向我的 iOS 设备发送推送消息 从 AWS 控制台向我的设备发布命令效果很好 然后我尝试从 PHP sns AWS get sns sns gt publish array
  • PHP:读取所有传入 HTTP 请求的类 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 PHP glob 列出 FTP 服务器上的文件不起作用

    我使用此代码来访问目录 location files pictures glob location png 我想使用 FTP 访问远程路径 location opendir ftp user password host name files
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • Nginx 502 网关错误。通过增加buffer来解决。为什么?

    我正在设置 LEMP 堆栈来运行 Drupal 我安装了 Nginx 和 PHP FastCGI Nginx 工作正常 但任何运行 PHP 的尝试都会出现错误 502 Bad Gateway 谷歌很快发现 nginx 502 错误网关 ht
  • 如何在codeigniter中将上传图片比例限制为16:9?

    这是我用来上传图像的代码 this gt load gt library upload ext pathinfo file name PATHINFO EXTENSION img name now ext imgConfig upload
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p
  • 矩形超出边界是什么意思

    PPB Graphics2D PaintImageData 矩形超出界限是什么意思 我几乎在我检查的每一段代码中都看到了它 最新的代码是 define my consumer key define my consumer secret oa
  • 通过 htaccess 将 PNG 解析为 PHP 仅适用于本地服务器,但不适用于网络服务器

    我用 PHP 创建了一个动态 PNG 图片 为了使用 PNG 扩展名 我创建了一个包含以下内容的 htaccess 文件 AddType application x httpd php png 在我的本地 XAMPP 服务器上 一切工作正常
  • 如何从日期中查找该月的最后一天?

    如何在 PHP 中获取该月的最后一天 Given a date 2009 11 23 我要2009 11 30 并给出 a date 2009 12 23 我要2009年12月31日 t返回给定日期所在月份的天数 请参阅的文档date ht

随机推荐

  • 为 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 见下文 事件方法 还有其他模式或方法来解决这个问题吗 如果有其