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



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

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

但是我收到以下错误:

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

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

有没有另一种方法可以指定多个参数来区分路由?

路由定义主要用于"干净的URL",因为它与请求路径匹配(没有查询字符串(。

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

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,因此无法保证这些参数在参数中可用。

最新更新