3

我是新來玩框架(scala),我仍然通過我的第一個Web應用程序我的方式。 我只是在我的控制,指數創造了第一種方法:傳遞請求參數在播放scala

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()) 
} 

現在我需要弄清楚如何實際添加PARAMS我的指標要求,我有一個導航的Scala類:

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

所以我不太確定這應該如何相關,在哪裏聲明請求參數,如何傳遞它? 我不知道爲什麼玩文檔似乎不適合我。請任何幫助,或有用的教程如何盯上,我會很感激。

+0

第二個片段似乎是一個重定向。第一個請求是一個隱式參數(它由框架爲每個動作提供)。你能更具體地瞭解你想達到的目標嗎? – Ashalynd

回答

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訪問

2

有至少兩個做法。

第一:

你可以讓玩家來解析從網址參數爲您提供: 比如你需要USER_ID傳遞給你的索引頁,那麼你對GET請求的URL可能是這樣的:

/index/1 

和戲劇的根文件:

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

所以在這種情況下,遊戲會從你的請求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("") 
} 

另:

爲使用MapRequest method queryString,你的控制器可能看起來像這樣直接拿到PARAMS從請求在您的控制器,例如:

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

+0

嗯,當你使用默認的conf/routes時,我恐怕這兩種方法都是正確的。在我的情況下,我使用nav.scala類,這是一個導航庫,但我可以告訴如何傳遞參數! – mahoosh