Playframework 2.0 以编程方式在Play2.0中添加管线
在游戏1.2.X中,我们可以Playframework 2.0 以编程方式在Play2.0中添加管线,playframework-2.0,Playframework 2.0,在游戏1.2.X中,我们可以 Router.addRoute("GET", "/somePath", "controller.methodName"); 我正在编写一个模块,其中添加了一个“路由”,该路由将由模块中的控制器处理。这是一个OAuth处理程序,希望用户不必处理OAuth握手等 如何在play2.0中做到这一点?*play2.0* *在路由文件中添加此行* GET/somePath controller.methodName()我不确定您是否可以 Play 2.0的概念是关注类型安全
Router.addRoute("GET", "/somePath", "controller.methodName");
我正在编写一个模块,其中添加了一个“路由”,该路由将由模块中的控制器处理。这是一个OAuth处理程序,希望用户不必处理OAuth握手等
如何在play2.0中做到这一点?*play2.0*
*在路由文件中添加此行*
GET/somePath controller.methodName()我不确定您是否可以 Play 2.0的概念是关注类型安全,其中包括routes文件。现在将编译路由文件,而不是在运行时进行解释。如果查看routes文件的代码,它会从routes文件本身生成一个scala类。因此,运行时操作将被忽略 不幸的是,看起来您的路由必须在routes文件中定义,除非您愿意拦截http请求以自己检查特定的路由,而/@文档链接在scala类中似乎就是这样做的
另请参见此错误帖子您不能以编程方式将其添加到Routes对象,但您可以拦截web请求,并通过覆盖
GlobalSettings.OnRouterRequest
自行处理这些请求。例如:
覆盖def onroutereRequest(请求:RequestHeader):选项[Handler]={
//首先进行我们自己的路径匹配-否则将其传递到游戏中。
请求路径匹配{
case“/injectedRoute”=>Some(controllers.Application.customRoute)
case z=>Play.maybeaapplication.flatMap(z.routes.flatMap{
路由器=>
路由器.handlerFor(请求)
})
}
}
我不知道这是否是推荐的方法,但它对我有效。下面是github上的一个示例:您可以在routes文件中添加一个通用路由(在文件末尾,因为它的优先级将根据声明的位置进行评估) 将要在运行时执行的逻辑放入控制器类中
public static Result showPage(String page){
if(page.contains("abc"){
.....
} else {
//return 404
}
}
我不确定它是否适合您的需求,但在大多数情况下,它就足够了。他希望以编程方式完成它,而不是通过2.3.7的configWorks很好地完成(除了我现在没有进行的性能测试)。一个很好的替代路由文件的限制…嗨,你能告诉我路由文件的代码吗。我正在尝试在不使用sbt插件的情况下使play项目专业化。我很难弄清楚这个scala文件是如何创建的。我正在使用play 2.3
public static Result showPage(String page){
if(page.contains("abc"){
.....
} else {
//return 404
}
}