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

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

作成:2013-02-03 20:43
更新:2013-02-03 20:59

■フォームヘルパーでフォームを作る

前回、フォームを送信して処理するという簡単な例を説明しましたが、「なんだかスマートでないやり方だな……」と感じたかもしれません。それもそのはず、あれは無理やりの力技のようなものでしたから。

この種のフレームワークでは、フォーム関係は専用の機能が用意されていて、それを使って実装するのが一般的です。なぜなら、そのほうが何かと便利だからです。フォーム送信と一口にいっても、きちんと実装するのはなかなか大変です。例えば、値が正しく入力されているかチェックしたり、再度フォームを表示した時に前回の値を保持するようにしたり、使いやすいフォームを作るためにはいろいろと実装しなければいけない機能があります。

そこで、多くのフレームワークでは、こうしたさまざまな機能を組み込んだフォームを自動生成するための仕組みを用意しているのです。Play Frameworkにもこうした機能があります。それが「フォームヘルパー」と呼ばれるものです。

ヘルパー」というのは、ビューの出力を支援する機能を提供するための仕組みです。Play Frameworkにはいろいろなヘルパーが用意されています。その中で、フォーム関連のタグを自動生成するために用意されているのがフォームヘルパーというわけです。

このフォームヘルパーは、以下のような書き方でフォームを作成します。
@helper.form( 属性の設定など ){
    ……コントロール関係を作る処理を用意する……
}
helper」というのが、ヘルパー関係の機能がまとめられたオブジェクトです。ここにある「form」メソッドを呼び出しているのですね。このformメソッドは、文字通り<form>タグを書きだす働きをします。()の引数内には、最低限「action」の値が設定されます。これにより、送信先を指定するわけですね。

その後の{}内には、フォームに用意するコントロール類を記述します。これも、やはりヘルパーのメソッドを使って作成します。


■フォームヘルパーの利用例

では、実際に記述したサンプルを下に挙げておきましょう。これは、2つの入力フィールドを持ったフォームを表示する例です。index.scala.htmlをこのように記述してみてください。ここでは、formメソッドを以下のような形で記述しています。
@helper.form(action = routes.Application.sendform)
引数のactionの指定をよく見てください。routes.Application.sendformと書かれていますね。これにより、Applicationの「sendform」アクションメソッドが呼び出される(つまり、sendformの公開アドレスに送信される)ようになります。

その後の{}内には、「inputText」というメソッドが記述されています。これは、こんな具合に書かれていますね。
@helper.inputText( フォームの項目の指定 )
この引数の部分が、非常に重要です。ここでは、myForm("name")といったものが引数に記述されています。これは一体、何でしょう? 最初の行を見ると、こんな変数が宣言されているのがわかります。
myForm: Form[Application.MyFormData]
ここで宣言しているmyFormという変数には、「MyFormDataというオブジェクトの値を保管するFormインスタンス」が設定される、ということを示しています。――Form? MyFormData? なんだそれ?と思うでしょうが、これらはコントローラー側で用意されるオブジェクトなのです。

というわけで、コントローラーの処理について引き続き考えていくことにしましょう。

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

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

●プログラム・リスト●

@(title: String, message: String, myForm: Form[Application.MyFormData])

@main(title) {
    <h1>@title</h1>
    <p>@message</p>
    @helper.form(action = routes.Application.sendform) {
        @helper.inputText(myForm("name"))
        @helper.inputText(myForm("mail"))
        <input type="submit">
    }
}

※関連コンテンツ

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