接受带环的数组样式urlencoded参数

时间:2013-11-25 18:22:46

标签: php clojure ring

我正在用Clojure中实现的旧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支持的数组样式参数?我可以使用任何第三方中间件吗?

1 个答案:

答案 0 :(得分:0)

如果您需要支持这些嵌套参数数组,则ring.middleware.nested-params包中会提供该功能。 wrap-nested-params中间件与wrap-params一起使用 - params将数据放入请求映射的: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)))