在几个文件中分割play2-mini路由

时间:2012-10-01 14:32:37

标签: scala rest playframework play2-mini

我对整个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
        } 
    }
  )
}

这只是第一步。我的最终目标是从指定的包动态加载所有对象(进程,用户等)。有什么想法可以做到吗?

1 个答案:

答案 0 :(得分:1)

您可以使用orElse组合路线:

val routes = User.routes orElse Process.routes

实际上,使用时,在编写Routes.apply时调用的val routes = Routes(...)方法将返回一个scala PartialFunction,它定义了上面使用的方法orElse

注意顺序,在我的示例中,User.routes中的路由将在Process.routes中的路由之前进行匹配测试。