2012-06-26 13 views

Odpowiedz

5

Tu masz dobrą próbkę, jak to się robi w Play:

https://github.com/playframework/Play20/blob/master/samples/scala/zentasks/app/controllers/Application.scala

val loginForm = Form(
    tuple(
    "email" -> text, 
    "password" -> text 
) verifying ("Invalid email or password", result => result match { 
    case (email, password) => User.authenticate(email, password).isDefined 
    }) 
) 



/** 
* Handle login form submission. 
*/ 
def authenticate = Action { implicit request => 
    loginForm.bindFromRequest.fold(
    formWithErrors => BadRequest(html.login(formWithErrors)), 
    user => Redirect(routes.Projects.index).withSession("email" -> user._1) 
) 
} 

Jest opisany w dokumentacji forms submission

2

jak @Marcus wskazuje bindFromRequest jest preferowane podejście. W przypadku prostych jednorazowych przypadków jednak pole

<input name="foo" type="text" value="1"> 

można uzyskać za pośrednictwem formularza post'd jak tak

val test = Action { implicit request => 
    val maybeFoo = request.body.get("foo") // returns an Option[String] 
    maybeFoo map {_.toInt} getOrElse 0 
} 
+11

'Błąd kompilacji [wartość get nie jest członkiem play.api.mvc.AnyContent]'? – Meekohi

+1

Spróbuj 'request.body.asFormUrlEncoded.get (" foo "). Lift (0)' - Wydawało mi się, że otrzymuję 'ArrayBuffer' i' lift (0) 'zwraca' Opcja' elementu, który zawiera – Techmag

8

As of Play 2.1, istnieją dwa sposoby, aby dostać się na parametrach postu:

1) zgłasza ciała jako forma urlencoded za pomocą parametru działania parsera, w którym to przypadku request.body automatycznie przekształca się w mapie [String Seq [String]]:

def test = Action(parse.tolerantFormUrlEncoded) { request => 
    val paramVal = request.body.get("param").map(_.head) 
} 

2) Poprzez wywołanie request.body.asFormUrlEncoded uzyskać Mapa [ciąg, SEK [String]]:

def test = Action { request => 
    val paramVal = request.body.asFormUrlEncoded.get("param").map(_.head) 
} 
0

Tu masz dobrą próbkę jak to się robi w Play 2:

def test = Action(parse.tolerantFormUrlEncoded) { request => 
 
    val paramVal = request.body.get("param").map(_.head).getorElse(""); 
 
}

Powiązane problemy