【问题标题】:Accepting array style urlencoded parameters with ring接受带有环的数组样式 urlencoded 参数
【发布时间】:2013-11-25 18:22:46
【问题描述】:

我正在用 Clojure 中实现的 PHP API 替换旧的 PHP API。 API 有一个接受数组样式参数的端点,例如:

http://localhost/create?person[name]=John&person[gender]=m

PHP 会产生这样的结果:

array(
    "person" => array(
        "name" => "John",
        "gender" => "m"
    )
)

我们目前正在使用 Ring 的 wrap-params 来处理参数。如果您查看 source 进行环的输入解码,您会看到环采用简单的视角来解码输入参数 - 只需将其拆分为 &=。因此,它产生以下结果:

{"person[name]" "John"
 "person[gender]" "m"}

明确地说,在 Clojure 中,我需要以下参数:

{"person" {"name" "John"
           "gender" "m"}}

如何设置我的环应用程序以正确接受 PHP 支持的数组样式参数?有没有我可以使用的第三方中间件?

【问题讨论】:

标签: php clojure ring


【解决方案1】:

如果您需要支持这些嵌套参数数组,ring.middleware.nested-params 包中提供了该功能。 wrap-nested-params 中间件与 wrap-params 一起使用 - 参数将数据放在请求映射的 :params 键中,嵌套参数将其替换为完全扩展的输入。

(use '[ring.middleware.params :only (wrap-params)])
(use '[ring.middleware.nested-params :only (wrap-nested-params)])

(def app (wrap-params (wrap-nested-params your-handler)))

【讨论】:

    猜你喜欢
    • 2018-05-29
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 2019-04-07
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多