【问题标题】: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)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-17
        • 2011-12-19
        • 2013-10-19
        • 2019-01-08
        • 2012-04-30
        • 1970-01-01
        • 2020-10-10
        • 2019-01-01
        相关资源
        最近更新 更多