§フォームテンプレートヘルパーの利用
Play には HTML テンプレート中にフォームやフィールドを生成するためのヘルパー関数が用意されています。
§<form>
タグの作成
まずは <form>
タグの作り方です。リバースルートから action
, method
を取り出して、フォームに自動的にセットするだけの単純なヘルパー関数の使い方は、次のとおりです。
生成される HTML に追加されるその他のパラメータを渡すこともできます。
Unable to find label form-pass-parameters in source file code/scalaguide/forms/scalaformhelper/views/login.scala.html§<input>
要素のレンダリング
views.html.helper
パッケージには input 要素のヘルパーがいくつか用意されています。これらヘルパーにフォームフィールドのオブジェクトを渡すと、それに対応した HTML フォームコントロールが表示されます。コントロールには値がセットされ、制約、エラー情報も付与されます。
form
ヘルパーと同様に、生成される HTML に追加されるその他のパラメータを指定することができます。
Note: _ 以外の文字で始まるパラメータは全て生成される HTML に追加されます。 _ で始まるパラメータは、フィールドコンストラクタの引数(後で説明します)のために予約されています。
§input 要素を自由に生成する
生成される HTML をもっと細かくコントロールしたい時のために、より汎用的な input
ヘルパーも用意されています。
§フィールドコンストラクタ
フィールドをレンダリングする際、単に <input>
タグを出力するだけでなく、<label>
タグや、利用している CSS フレームワークによってはフィールドを修飾する他の HTML 要素を出力しなければならないこともあります。
全ての input ヘルパーはこの目的のために FieldConstructor
という暗黙的な引数をとります。デフォルト (フィールドコンストラクタがスコープ内に存在しない場合に使われる) では、次のような HTML が生成されます。
デフォルトのフィールドコンストラクタは、input ヘルパーの引数に渡すことができる以下の追加オプションに対応しています。
Unable to find label form-field-options in source file code/scalaguide/forms/scalaformhelper/views/user.scala.html§Twitter bootstrap フィールドコンストラクタ
Play には、TwitterBootstrap 1.4 に対応したフィールドコンストラクタが組み込みで用意されています。 (注意: 2.0.2 は LESS 1.3 と Bootstrap 2.0 をサポートする予定です)
これを利用するためには、単にスコープ内にインポートしてください。
Unable to find label import-twitterbootstrap in source file code/scalaguide/forms/scalaformhelper/views/user.scala.htmlこのフィールドコンストラクタは、次のような HTML を生成します。
Unable to find label form-bootstrap-generated in source file code/scalaguide/forms/scalaformhelper/views/user.scala.htmlまた、デフォルトのフィールドコンストラクタと同様のオプションにも対応しています (以下を参照) 。
§フィールドコンストラクタを自作する
独自のフィールドコンストラクタが必要になることもあります。まず以下のようなテンプレートを作成します。
Unable to find label form-myfield in source file code/scalaguide/forms/scalaformhelper/views/user.scala.htmlNote: これはただのサンプルです。必要であれば、もっと複雑なテンプレートを作成することもできます。また、
@elements.field
と書くと元のフィールドを参照することができます。
次に、このテンプレートを利用して FieldConstructor
を作成します。
フォームヘルパーにこのフィールドコンストラクタを使わせるため、テンプレートにインポートします。
Unable to find label import-myhelper in source file code/scalaguide/forms/scalaformhelper/views/user.scala.htmlUnable to find label form-myfield-helper in source file code/scalaguide/forms/scalaformhelper/views/user.scala.htmlこれで、作成したフィールドコンストラクタを使って、テキスト用の input 要素がレンダリングされます。
Note: テンプレート内で
Unable to find label import-myhelper-implicit in source file code/scalaguide/forms/scalaformhelper/views/user.scala.htmlUnable to find label form-myfield-helper in source file code/scalaguide/forms/scalaformhelper/views/user.scala.htmlFieldConstructor
を implicit value として定義することもできます。
§値の繰り返しを扱う
最後に紹介するヘルパーは、値の繰り返しに関する input 要素を生成するものです。まず、次のようなフォームを定義したとします。
val userFormRepeated = Form(
mapping(
"name" -> text,
"emails" -> list(email)
)(UserListData.apply)(UserListData.unapply)
)
次に、フォームにの emails
フィールドのために沢山の input 要素を生成する必要があります。ここで repeat
ヘルパーが役に立ちます。
フィールドが空の場合であっても、min
パラメータに指定した個数の input 要素が生成されます。
Next: CSRF 対策
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。