3

我是玩框架(scala)的新手,我仍然在通过我的第一个 Web 应用程序。我刚刚在我的控制器中创建了第一个方法,索引:

 def index = UserAwareContextAction { implicit request =>
val subset = request.params.get("subset").getOrElse("all")
request.user match {
  case Some(user) => selectIndex(request, subset)
  case _ => Ok(views.html.index())
}

现在我需要弄清楚如何将参数实际添加到我的索引请求中,我有一个导航 scala 类:

  val index                     =   GET.on(root).to{Application.index_}

所以我不太确定这应该如何相关,在哪里声明请求参数,如何传递它?我不知道为什么播放文档似乎与我无关。请任何帮助,或有关如何盯着看的有用教程,我将不胜感激。

4

2 回答 2

2

通常,带有参数的播放控制器如下所示:

// Controller
def get(id: Long) = Action { implicit request =>
  // do stuff
  val someArgument = ...
  Ok(views.html.index(someArgument))

// route
GET    /account/:id      AccountController.get(id: Long)

如果您尝试访问查询字符串参数,则可以implicit request通过简单地调用request.queryString

于 2013-10-25T22:20:41.447 回答
2

至少有两种方法。

第一的:

您可以让 Play 为您解析来自 url 的参数:例如,您需要将 user_id 传递给您的索引页面,那么您的 GET 请求的 url 可能是这样的:

/index/1

并在播放根文件:

GET /index/:user_id      Controllers.Application.index(user_id : Int)

所以在这种情况下,play 将从您的请求 url 中为您解析 user_id 为 1。或者您的要求可能如下:

/index?user_id=1在你的根目录下:

GET /index      Controllers.Application.index(user_id : Int) 

并再次为您解析它,user_id 为 1。

在两种情况下,您会将此 user_id 作为控制器中的参数:

def index(user_id : Int) = Action{implicit request =>
       // user_id == 1
       ......
       Ok("")
}

其他:

直接从控制器中的请求获取参数,例如作为Map使用Request method queryString,您的控制器可能如下所示:

 def index = Action{ request =>
 // you get your params as Map[String,Seq[String]] where `key` is you parameter `name` and value is //wraped in to a Seq 
    val params = request.queryString
     // or if you want to flatten it to Map[String,Option[String]] for example    
       val params = request.queryString.map {case(k,v) => k->v.headOption}  
       .....    
       Ok("")
        }

对于这种情况,根很简单:GET /index Controllers.Application.index

于 2013-10-26T09:33:26.823 回答