Play2-Scala/Formオブジェクトでパラメータを受ける

Play2-Scala/Formオブジェクトでパラメータを受ける

2.3 と 2.4で微妙に書き方が違う

基本

Import の追加(2.4)

2.4 ではこの 2行を追記しておく必要がある

import play.api.data._
import play.api.data.Forms._

受取用の Form オブジェクトを用意する

これは Controller に用意する。

object Hoge extends Controller {
  val hogeForm = Form(
    "name" -> text
  )
}

name というキーでパラメータを受けることにする。

取出す側のメソッドを作る

object Hoge extends Controller {
  // ......
  def piyo = Action { implicit request =>
    Ok("piyo " + hogeForm.bindFromRequest().get)
  }
  // ......
}

ルーティングする

QueryString でパラメータを渡すということで

GET    /hoge/piyo    controllers.Hoge.piyo

とする。メソッドの呼び出し側に引数の設定が無いということに注目

動かす

http://localhost:9000/hoge/piyo?name=aaa
piyo aaa

動いた。

複数のパラメータを受け取る

受取用の Form クラスを用意する

基本ではオブジェクトで受けたが受けようの型を用意する

object Hoge extends Controller {
  // ......
  case class MyForm(name:String, age:Int)
  // ......
}

Scala/クラス 参照。Scala はバリューオブジェクト用のクラスを簡素に書くことが出来る

受け取り用 Form クラスに値をマッピングする

  case class MyForm(name:String, age:Int)
  val myForm = Form(
    mapping(
      "name" -> text,
      "age" -> number
   )(MyForm.apply)(MyForm.unapply))

各 property と名前を揃えて書く。ケツの apply と unapply は定型文なのでおまじないとしていいだろう。

取出す側のメソッドを作る

routes は特に何も必要ない

  def piyo = Action { implicit request =>
    val f = myForm.bindFromRequest().get
    Ok("piyo " + f.name + " " + f.age)
  }

動かす

http://localhost:9000/hoge/piyo?name=aaa&age=123
piyo aaa 123

OK

play_framework/play2_scala/bind_params_to_form_object.txt · 最終更新: 2017-10-02 16:36 by ore