Scala&播放:没有标识符的路由正则表达式

时间:2013-12-26 19:00:01

标签: regex scala playframework-2.0

我想在Play应用程序中为我的路线提供可选的多个。例如:

/path/1
/paths/1

我尝试的路线网址是这样的:

/path<[s?]>/:id

如果我只在它前面放一个$,它会要求一个标识符;如果我给它一个标识符,它告诉我我需要在调用定义中使用它。我是否正在努力做到这一点,而不必做每个可能的多个/多个组合的笛卡尔积?

2 个答案:

答案 0 :(得分:4)

如果我对RoutesCompiler的理解是正确的(尤其是check函数),则网址中的任何动态部分都必须用于调用定义。

所以看起来唯一的选择就是添加一个像这样的新参数:

GET    /$p<paths?>/:id         controllers.PathController.get(p, id)
GET    /otherpath$p<s?>/:id    controllers.OtherController.get(p, id)

然后忽略p参数。使用反向路线时,您需要提供它。

答案 1 :(得分:3)

您必须遵循编译器规则来组成路线。

Playframework Documentation

带有自定义正则表达式的动态部分 您还可以使用$ id语法为动态部件定义自己的正则表达式:

GET   /clients/$id<[0-9]+>  controllers.Clients.show(id: Long)  

在您的情况下,请尝试以下操作:

GET     /results/$departure</?.+>           @controllers.SearchController.results(departure: String)

但是,您可能需要确保此路径与其他路径不重叠。