如何设置在查询字符串中包含多个参数的Phoenix路由

时间:2018-06-07 20:04:35

标签: routes phoenix-framework

我希望在凤凰城生成一条接受2个查询参数的路线。

get "/items?id=:id&action=:action", ActionController, :index_by

但是我收到以下错误:

(Plug.Router.InvalidSpecError) :identifier in routes must be made of letters, numbers and underscores

我注意到当我删除它编译得很好的第二个参数时,所以我猜这与分隔符&有关,以便将查询字符串中的参数分开。

是否有另一种方法来指定多个这样的参数来区分路线?

1 个答案:

答案 0 :(得分:1)

路由定义主要用于“干净网址”,因为它在请求路径上匹配(没有查询字符串)。

考虑到这一点,您可以像这样定义您的路线

get("item/:id/:action", ActionController, :index_by)
#Or
get("/items", ActionController, :index_by)

第一个路线定义将从请求路径中捕获idaction,例如GET / items / 1 / edit会在您的参数中为您提供%{"id"=>1, "action"=>"edit"}

第二个将从查询字符串中捕获idaction。例如GET "/items?id=1&action=delete"会在你的参数中给你%{"id"=>1, "action"=>"delete"}

请注意,与第一个路径定义不同,第二个路径定义不强制查询字符串中存在idaction,因此您无法保证这些参数在您的参数中可用