【问题标题】:Iterate through all PostForm values Gin Gonic遍历所有 PostForm 值 Gin Gonic
【发布时间】:2020-04-09 07:03:57
【问题描述】:

是否有一种简单的方法可以使用 Gin Gonic 列出/遍历所有帖子值? (走)

我试过了:

c.Request.ParseForm()
for key, value := range c.Request.PostForm {
    log.Printf("POST %v = %v",key,value)
}

但这没有显示任何值,但是当我直接从上下文中测试值时:

log.Printf("POST email = %v", c.PostForm("email")

输出很好。

我要做的是将所有帖子值映射到 gin.H{} 上下文中,以便在失败时我可以将发布的值传递回 .HTML 模板上下文并预先填充它们(连同我的错误信息)。我发现最好的方法是将每个 POST 值手动连接到 gin.H{} 映射,但对于大型表单,这些似乎冗长且不理想。

【问题讨论】:

  • 查看c.PostForm() 的实现,我假设PostForm 尚未被解析,因此可能不包含任何值github.com/gin-gonic/gin/blob/develop/context.go#L264-L276
  • @phoet - 看起来像那样...但 ParseForm() 不应该调用解析吗?解决方法是什么?我需要打电话给ParseMultipartForm吗?

标签: go go-gin


【解决方案1】:

我们还需要像 @BadPirate 描述的那样,如果有人需要 gin 1.6.2

func register(c *gin.Context){
    c.MultipartForm()
    for key, value := range c.Request.PostForm {
        log.Printf("%v = %v \n",key,value)
    }
}

感谢@BadPirate 和@phoet 提供信息。

【讨论】:

    【解决方案2】:

    这里的问题是表单(未显示)是一个多部分表单。 ParseForm 不解析多部分表单,因此没有数据。解决方法是改为调用ParseMultipartForm。感谢@phoet 指出 Gin Gonic 中用于 PostForm 的方法(它会为您调用 ParseMultipartForm,并且会自动调用),这帮助我找到了答案。

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 2020-03-03
      • 2018-11-07
      • 2020-04-14
      • 1970-01-01
      • 2021-09-06
      相关资源
      最近更新 更多