日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

Play Framework で POST されたデータを受け取る。

play framework 2.0.4 でPOSTデータを受け取ってみました。

参考にしたのは、ここ
(たぶんここでだいたい解決されると・・・w)

ただ、Modelから作ったFormでbindFromRequest.getは出来なかった(´・ω・`)
なんでか調査したいところ。


流れは、

  1. Formを作る。
  2. bindFromRequestのfoldでいろいろする←

以上!

注意点

  1. implicit request => をActionの後にくっつけることを忘れないこと。
  2. import play.api.data._ と import play.api.data.Forms._
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())
    }
  )
前提
  • /path/to/app/views/errors.scala.html
  • /path/to/app/views/index.scala.html

が存在していること。


こんな感じでデータを受け取ることが出来る。
Modelを作成しなくてももちろんできるので、ここを参考にするといいと思いますた。

あと、Validationのtextとかその他のものはここがすごく参考になりました。


参考:
Play2.0(Scala)でフォームの値を受け取る
Play 2.0 でのフォーム定義

ありがとうございました