17

「POST」タイプのルートがあります。ページに投稿データを送信しています。その投稿データにアクセスするにはどうすればよいですか。たとえば、PHP では $_POST を使用します

scala と play フレームワークで投稿データにアクセスするにはどうすればよいですか?

4

4 に答える 4

9

Play 2.1 では、POST パラメータを取得する方法が 2 つあります。

1) アクション パーサー パラメーターを介してフォーム urlencoded として本文を宣言します。この場合、request.body は自動的に Map[String, Seq[String]] に変換されます。

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

2) request.body.asFormUrlEncoded を呼び出して Map[String, Seq[String]] を取得する:

def test = Action { request =>
    val paramVal = request.body.asFormUrlEncoded.get("param").map(_.head)
}
于 2013-10-07T18:41:28.690 に答える
5

ここに、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)
  )
}

フォーム送信のドキュメントに記載されています

于 2012-06-26T23:16:51.557 に答える
2

@Marcus が指摘しているように、bindFromRequest が推奨されるアプローチです。ただし、単純な 1 回限りのケースでは、フィールド

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

投稿フォームからアクセスできます

val test = Action { implicit request =>
  val maybeFoo = request.body.get("foo") // returns an Option[String]
  maybeFoo map {_.toInt} getOrElse 0
}
于 2012-06-27T02:06:56.953 に答える