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

フォームヘルパーを活用しよう![Scala編] (2/5)

作成:2013-02-03 20:47
更新:2013-02-03 21:02

■コントローラーでのフォーム処理の流れ

では、コントローラー側の実装に進みましょう。コントローラー側は、フォームヘルパーによるフォームの処理をスムーズに行うため、けっこう細かな対応を行う必要があります。以下に整理していきましょう。


1. フォーム管理クラスの定義
フォームから送信された情報は、後述しますがFormというインスタンスとして渡されます。このFormのままでは何かと使いにくいので、フォームから送信された値をまとめて管理するためのクラスを定義しておきます。

これは、コントローラークラス内に、以下のような形で定義を記述します。
case class クラス名 ( 値1, 値2, ……)
Javaでは、クラス定義は「class クラス名」と書くのが基本でしたね。Scalaもそうなのですが、こんな具合に「case class クラス名」という形でクラスを定義することもあります。普通のクラス定義と何が違うのかというと、このようにして定義すると、()に用意した引数の値ごとに、自動的にGetterメソッドやtoStringequalsなどの基本メソッドが組み込まれるようになっているのです。

これは、データを管理するためのクラスをささっと定義するときにはものすごく便利です。保管する値を()の引数に用意しておけば、自動的にそれらを扱うための基本的なメソッドを実装してくれるのですから。


2. Formインスタンスの用意
フォームヘルパーから送られた情報は、Formクラスのインスタンスとして扱うことができます。そのために、あらかじめFormインスタンスを用意しておきます。これは以下のような形で記述します。
変数 = Form( mapping( 各要素の定義 )(管理クラス.apply)(管理クラス.unapply) )
なんだか不思議な形を指定しますね。最初のmapping( 各要素の定義 )というのは、送られたフォームのデータの構造を記すためのものです。これにより、何という名前のどういう値を保管する項目があるのかをきちんと指定しておくのですね。

その後の(管理クラス.apply)(管理クラス.unapply)は、送られたフォームのデータのバインドに関する設定です。「管理クラス」というのは、その前にcase classで定義したクラスです。このクラスをapplyすることで、Formのデータを管理クラスのインスタンスとして持ち出せるようになります。


3. アクションでフォーム情報を取り出す
以上の準備ができたら、アクションで送信されたフォームの情報を取り出し処理できるようになります。これはこんな形で行います。
def アクション = Action { implicit request =>
    var変数 = <Formインスタンス>.bindFromRequest
    val 変数2 =変数.get
最初のimplicit request =>により、リクエストを扱うrequest変数が使えるようになります。これはフォーム利用アクションでは必須のものと考えておきましょう。

続いて、先に2で作成しておいたFormインスタンスの「bindFromRequest」メソッドを呼び出します。このメソッドは、Formインスタンスにリクエストで渡される値を組み込んだものを作成し返します。これにより、変数にフォームの情報が書き込まれたインスタンスが得られるわけです。

そして、そのインスタンスの「get」により、先に(管理クラス.apply)で関連付けておいた管理クラスのインスタンスが取り出されます。このインスタンスに、フォームの値が全てまとめられている、というわけです。

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

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

※関連コンテンツ

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