Form
オブジェクトを使い、その値をScala型のデータに変換(バインド)して受け取るcase class LoginData(email: String, password: String)
case class
でデータ構造を定義するval loginForm: Form[LoginData] = Form(
mapping(
"email" -> email,
"password" -> nonEmptyText
)(LoginData.apply)(LoginData.unapply)
)
Form[LoginData]
:LoginData型のデータを受け取るフォームを意味する"email"
:フォームのinput name属性email
:Scala側の型(形式チェックも含む)bindFromRequest
:リクエストの中にあるフォームデータを、Scalaのデータ型(case class)に変換する処理loginForm.bindFromRequest.fold(
formWithErrors => BadRequest("入力エラー"), // 入力に不備がある場合
loginData => Ok("ログイン成功: " + loginData.email) // 入力が正常な場合
)
@helper.form(action = routes.LoginController.login()) {
@helper.inputText(loginForm("email"))
@helper.inputPassword(loginForm("password"))
<input type="submit" value="ログイン">
}
@helper.form(...)
:フォームの開始タグと送信先を生成@helper.inputText(...)
:inputタグを自動生成し、エラー表示などもしてくれる