play framework 2.0.4 でPOSTデータを受け取ってみました。
参考にしたのは、ここ
(たぶんここでだいたい解決されると・・・w)
ただ、Modelから作ったFormでbindFromRequest.getは出来なかった(´・ω・`)
なんでか調査したいところ。
流れは、
- Formを作る。
- bindFromRequestのfoldでいろいろする←
以上!
注意点
package controllers import play.api._ import play.api.mvc._ import play.api.data._ //←←← import play.api.data.Forms._ //←←← import models._ //modelからFormを作成する場合はimportしておくと便利かもしれない。 ・ ・ ・ def hoge = Action { implicit request => //←←← fugafuga ・ ・ ・ }
のように。
implicit request => を忘れると、以下のように怒られます\(^o^)/
Cannot find any HTTP Request here
では実践!
今回はModelからformを作成したので、Modelから作成する方針で
/path/to/app/models/user.scala
package models case class User( name :String, email:String ){
っていうModel(?)が存在してたとして、
/path/to/app/controllers/user.scala
package controllers import play.api._ import play.api.mvc._ import play.api.data._ import play.api.data.Forms._ import models._ object User extends Controller { val userDataForm: Form[User] = Form ( mapping( "name" -> text, //textは空文字でも良いrequiredなString型文字列 "email"-> text, )(User.apply)(User.unapply) ) def create = Action { implicit request => userDataForm.fold( errors => BadRequest(views.html.errors(errors)), // userDataFormを定義した時のmappingのvalueを参考にValidationを行う。 // Validationに引っかかったらerrorsの処理を行う。 userdata => { //この後で利用する変数名 //ここがuserなら↓のuserdata.nameはuser.nameになる。 println(userdata.name) println(userdata.email) //ここでPOSTデータを受け取った後の処理を行う。 //ログインとか Ok(views.html.index()) } )
前提
が存在していること。
こんな感じでデータを受け取ることが出来る。
Modelを作成しなくてももちろんできるので、ここを参考にするといいと思いますた。
あと、Validationのtextとかその他のものはここがすごく参考になりました。
参考:
Play2.0(Scala)でフォームの値を受け取る
Play 2.0 でのフォーム定義
ありがとうございました