我对整个Scala和Play事情都很陌生,所以也许我解决这个问题的方法并不正确。我正在使用Scala 2.9.1和play-mini_2.9.1-2.0.1。
我有一个App.scala,通常包含路由。但我的目的不是在此文件中插入所有可能的路由,而是按实体拆分。就我而言:用户,角色,过程。
为了做到这一点,我尝试了类似的东西:
//in App.scala
object App extends Application {
println("Checking Database")
...
println("Resume executions from database")
...
def route = Routes(Process.routes :: User.routes) // I know this is wrong but I think you get what I want to do...
}
//in Process.scala
object Process {
val routes = Routes(
{
case GET(Path("/process")) => Action{ request =>
// returns a list of processes
}
case GET(Path("/process")) & QueryString(qs) => Action{ request =>
val id = QueryString(qs,"id").getOrElse(0)
// return process by id
}
}
)
}
//in User.scala
object User {
val routes = Routes(
{
case GET(Path("/user")) => Action{ request =>
// returns a list of processes
}
case GET(Path("/user")) & QueryString(qs) => Action{ request =>
val id = QueryString(qs,"id").getOrElse(0)
// return process by id
}
}
)
}
这只是第一步。我的最终目标是从指定的包动态加载所有对象(进程,用户等)。有什么想法可以做到吗?
答案 0 :(得分:1)
您可以使用orElse
组合路线:
val routes = User.routes orElse Process.routes
实际上,使用时,在编写Routes.apply
时调用的val routes = Routes(...)
方法将返回一个scala PartialFunction,它定义了上面使用的方法orElse
。
注意顺序,在我的示例中,User.routes
中的路由将在Process.routes
中的路由之前进行匹配测试。