我想在Play应用程序中为我的路线提供可选的多个。例如:
/path/1
/paths/1
我尝试的路线网址是这样的:
/path<[s?]>/:id
如果我只在它前面放一个$,它会要求一个标识符;如果我给它一个标识符,它告诉我我需要在调用定义中使用它。我是否正在努力做到这一点,而不必做每个可能的多个/多个组合的笛卡尔积?
答案 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)
您必须遵循编译器规则来组成路线。
带有自定义正则表达式的动态部分 您还可以使用$ id语法为动态部件定义自己的正则表达式:
GET /clients/$id<[0-9]+> controllers.Clients.show(id: Long)
在您的情况下,请尝试以下操作:
GET /results/$departure</?.+> @controllers.SearchController.results(departure: String)
但是,您可能需要确保此路径与其他路径不重叠。