【问题标题】:Scala & Play: route regex without identifierScala & Play:没有标识符的路由正则表达式
【发布时间】:2013-12-26 19:00:01
【问题描述】:
我想在 Play 应用程序中为我的路线提供可选的复数。例如:
/path/1
/paths/1
我尝试的路由 URL 是这样的:
/path<[s?]>/:id
如果我在它前面放一个 $,它会要求一个标识符;如果我给它一个标识符,它会告诉我需要在调用定义中使用它。我正在尝试做的事情是否可能,而不必做每个可能有/没有复数组合的笛卡尔积?
【问题讨论】:
标签:
regex
scala
playframework-2.0
【解决方案1】:
如果我对RoutesCompiler 的理解是正确的(尤其是check 函数),那么在调用定义中必须使用URL 中的任何动态部分。
所以看起来唯一的选择是添加一个像这样的新参数:
GET /$p<paths?>/:id controllers.PathController.get(p, id)
GET /otherpath$p<s?>/:id controllers.OtherController.get(p, id)
然后忽略p 参数。不过,在使用反向路由时,您需要提供它。
【解决方案2】:
您必须遵循编译器规则来编写路由。
Playframework Documentation
带有自定义正则表达式的动态部分
您还可以使用 $id 语法为动态部分定义自己的正则表达式:
GET /clients/$id<[0-9]+> controllers.Clients.show(id: Long)
在您的情况下,请尝试以下操作:
GET /results/$departure</?.+> @controllers.SearchController.results(departure: String)
但是,您可能需要确保此路径不与其他路线重叠。