libro
www.tuyano.com
初心者のためのPlay Framework入門

Model(モデル)を使ってデータベースアクセスする[Scala編] (6/7)

作成:2013-02-10 10:18
更新:2013-02-10 10:18

■コントローラーからモデルを使う

では、コントローラーからモデルクラスを利用してデータベースにアクセスを行なってみましょう。今回は、indexsendformの2つのアクションメソッドを用意することにします。indexでは入力フォームとレコードの一覧を取得て表示をします。フォームに値を書いて送信するとsendformにPOST送信され、ここでレコードの保存を行います。

下のリスト欄に、コントローラー(Application.scala)と、2つのアクションで使用するビューテンプレート(index.scala.html)のソースコードを掲載しておきました。

●レコードの取得処理
indexでの全レコードの取得はとても簡単です。MydatagetAllを呼び出すだけですから。
val datas = Mydata.getAll
これで取得したものをビュー側でテーブルに出力しています。以下の部分ですね。
@for(data:Mydata <- datas){
    <tr>
        <td>@data.name</td>
        <td>@data.mail</td>
        <td>@data.tel</td>
    </tr>
}
変数datasから順にMydataを取り出し、その値をテーブルとして書き出しています。getAllではas(Mydata.data)によりMydataインスタンスの形で値を取り出すようにしていましたから、こんな具合にコレクションの繰り返し処理で簡単にレコードを処理していくことができます。

●レコードの保存処理
レコードの保存は、sendformで行なっています。これも非常に単純です。送信されたフォーム情報からMydataを取り出し、その「addData」を呼び出すだけです。
var myForm = form1.bindFromRequest
val data: Mydata = myForm.get
val result = data.addData
Formの使い方は前回フォームヘルパーのところで説明しました。bindFromRequestにより送信されたフォーム情報を管理するFormインスタンス(変数form1)にフォームの値をバインドしたものをmyFormとして取得し、そこからgetMydataを取り出してaddDataする、という流れになります。

いずれも、既に基本的な処理部分はモデルクラス側に用意していますから、コントローラーではただメソッドを呼び出すだけで済みます。モデルを定義する利点は、ここにあります。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※Application.scala

package controllers

import models._
import play.api._
import play.api.mvc._
import play.api.data._
import play.api.data.Form
import play.api.data.Forms._

object Application extends Controller {

    val form1 = Form(
         mapping(
            "name" -> text,
            "mail" -> text,
            "tel" -> text
        )(Mydata.apply)(Mydata.unapply)
    )
    
    def index = Action {
        val title = "サンプルページ"
        val msg = "サンプルのページです。"
        val datas = Mydata.getAll
        Ok(views.html.index(title, msg, form1, datas))
    }
    
    def sendform = Action { implicit request =>
        var myForm = form1.bindFromRequest
        val data: Mydata = myForm.get
        val result = data.addData
        val title = "サンプルページ"
        val msg = "名前:" + data.name + ", メール:" + data.mail
        Ok(views.html.index(title, msg, myForm, null))
    }
}


※index.scala.html

@(title: String, message: String, myForm: Form[Mydata], datas:List[Mydata])

@main(title) {
    <h1>@title</h1>
    <p>@message</p>
    @helper.form(action = routes.Application.sendform) {
        @helper.inputText(myForm("name"))
        @helper.inputText(myForm("mail"))
        @helper.inputText(myForm("tel"))
        
        <input type="submit">
    }
    <hr>
    @if(datas != null){
        <p>Mydata list</p>
        <table>
            <tr>
                <th>Name</th>
                <th>Mail</th>
                <th>Tel</th>
            </tr>
        @for(data:Mydata <- datas){
            <tr>
                <td>@data.name</td>
                <td>@data.mail</td>
                <td>@data.tel</td>
            </tr>
        }
        </table>
    }
}

※関連コンテンツ

「初心者のためのPlay Framework入門」に戻る