2

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

这只是第一步。我的最终目标是从指定的包中动态加载所有对象(进程、用户等)。任何想法如何做到这一点?

4

1 回答 1

1

您可以使用orElse组合路线:

val routes = User.routes orElse Process.routes

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

请注意顺序,在我的示例中,User.routes将在Process.routes.

于 2012-10-01T15:43:43.860 回答