【问题标题】:Why is my route not matching any action为什么我的路线不匹配任何操作
【发布时间】:2014-12-28 21:50:20
【问题描述】:

使用 play 框架,我正在尝试使用正则表达式匹配路线。

我想要的是使用一个操作来映射所有这些 url:

mydomain.com/my-post-title-123

mydomain.com/another-post-title-124

mydomain.com/a-third-post-title-125

从 url 的末尾获取这个“123、124 和 125”,以便控制器可以使用它。基本上忽略任何帖子磁贴,只使用最后的数字。

我的 routes.conf 中有以下内容

GET         /$postId<\d$>         controllers.Posts.viewPost(postId: Int)

但我收到错误页面“找不到操作”

【问题讨论】:

  • 如果您想获取网址中的最后一位数字,只需使用\d+$...无论如何,您代码中的正则表达式与 regex101 上的不一样! (缺少$
  • 谢谢,我试过你建议的表达方式,它更简单,也符合我的需要......但仍然没有运气匹配动作
  • 您在\d+$ 中缺少+ !!!如果仍然没有运气,那就等待知道该框架的其他人通过 xD

标签: regex playframework


【解决方案1】:

您在路由定义的正则表达式中缺少 url 前缀和“+”。这是我的路线配置,它工作正常

#Regex test
GET         /$prefix<.*>$postId<\d+$>         controllers.Application.viewPost(prefix:String,postId: Int)

Controllers.Application.viewPost

def viewPost(prefix:String,postId:Int) = Action{
    Ok("the post id is: "+postId+" the prefix is:"+prefix)
  }

输出将是

the post id is: 123 the prefix is "whatever/prefix/you/give"

** 测试过,可以用。

【讨论】:

  • 谢谢,但我使用的是正则表达式,所以我不需要为每个帖子编写一个操作。我不能像你建议的那样添加 url 前缀
  • 我想你的意思是你不想为每个前缀写一个动作。检查更新的答案,使用 2 个正则表达式,一个捕获前缀,一个捕获 id。关键是在正则表达式中捕获路径中的所有内容,而不仅仅是 id,如果您不想要前缀,请稍后忽略它
  • 谢谢,这个终于成功了$prefix&lt;.*-&gt;$postId&lt;\d+$&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多