2

Play 1.x 提供了一条包罗万象的路线conf/route

# Catch all
*       /{controller}/{action}                  {controller}.{action}

但似乎 Play 2.x 删除了这个功能。

4

2 回答 2

3

总的来说,这种变化是type-safe朝着整个 2.0 理念的方向迈出的一步,我不认为这是错误的。

在带有路由的框架中type-safe——比如在 Play 2 中,链接是逻辑的重要组成部分,因此使用“未知”目的地会增加错误的可能性并同时降低安全性,这不是一件好事。与 1.2 不同的是,新的router验证参数类型还提高了应用程序的质量,尽管需要为每个action.

最后,总是有可能在您的类中添加自定义“调度程序”方法并“捕获”多段路径asterisk rule(单个参数用冒号标识):

GET   /multi/*path    controllers.Application.mySubRouter(path)

这将在之后传递链接的整个部分http://domain.tld/multi/并将其作为 a 发送到调度程序操作,String因此您可以使用它通过斜杠分割段,并使用两个第一个元素作为您想要重定向到的控制器和操作名称。

http://domain.tld/multi/MyController/myAction/p1/p2

但是在这种情况下,我肯定会建议在您的调度程序中对允许的组合进行一些额外的验证(可能通过自定义数据库规则集或一些正则表达式或其他方式),否则您将回到我论证的切入点:error prone+low security

于 2012-07-19T08:23:58.490 回答
0

您可能会在 GlobalSettings 上找到 onRouteRequest 方法,该方法允许您拦截路由请求。文档在这里

于 2013-09-25T15:17:54.460 回答