Documentation

You are viewing the documentation for the 2.2.x release series. The latest stable release series is 2.4.x.

§フォームテンプレートヘルパーの利用

Play には HTML テンプレート中にフォームやフィールドを生成するためのヘルパー関数が用意されています。

§<form> タグの作成

まずは <form> タグの作り方です。リバースルートから action, method を取り出して、フォームに自動的にセットするだけの単純なヘルパー関数の使い方は、次のとおりです。

Unable to find label form-tag in source file code/scalaguide/forms/scalaformhelper/views/login.scala.html

生成される 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 フォームコントロールが表示されます。コントロールには値がセットされ、制約、エラー情報も付与されます。

Unable to find label form-define in source file code/scalaguide/forms/scalaformhelper/views/user.scala.htmlUnable to find label form-user in source file code/scalaguide/forms/scalaformhelper/views/user.scala.html

form ヘルパーと同様に、生成される HTML に追加されるその他のパラメータを指定することができます。

Unable to find label form-user-parameters in source file code/scalaguide/forms/scalaformhelper/views/user.scala.html

Note: _ 以外の文字で始まるパラメータは全て生成される HTML に追加されます。 _ で始まるパラメータは、フィールドコンストラクタの引数(後で説明します)のために予約されています。

§input 要素を自由に生成する

生成される HTML をもっと細かくコントロールしたい時のために、より汎用的な input ヘルパーも用意されています。

Unable to find label form-user-parameters-html in source file code/scalaguide/forms/scalaformhelper/views/user.scala.html

§フィールドコンストラクタ

フィールドをレンダリングする際、単に <input> タグを出力するだけでなく、<label> タグや、利用している CSS フレームワークによってはフィールドを修飾する他の HTML 要素を出力しなければならないこともあります。

全ての input ヘルパーはこの目的のために FieldConstructor という暗黙的な引数をとります。デフォルト (フィールドコンストラクタがスコープ内に存在しない場合に使われる) では、次のような HTML が生成されます。

Unable to find label form-user-generated in source file code/scalaguide/forms/scalaformhelper/views/user.scala.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.html

Note: これはただのサンプルです。必要であれば、もっと複雑なテンプレートを作成することもできます。また、@elements.field と書くと元のフィールドを参照することができます。

次に、このテンプレートを利用して FieldConstructor を作成します。

Unable to find label form-myfield-helper in source file code/scalaguide/forms/scalaformhelper/views/user.scala.html

フォームヘルパーにこのフィールドコンストラクタを使わせるため、テンプレートにインポートします。

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: テンプレート内で FieldConstructor を implicit value として定義することもできます。

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.html

§値の繰り返しを扱う

最後に紹介するヘルパーは、値の繰り返しに関する input 要素を生成するものです。まず、次のようなフォームを定義したとします。

val userFormRepeated = Form(
  mapping(
    "name" -> text,
    "emails" -> list(email)
  )(UserListData.apply)(UserListData.unapply)
)

次に、フォームにの emails フィールドのために沢山の input 要素を生成する必要があります。ここで repeat ヘルパーが役に立ちます。

Unable to find label form-field-repeat in source file code/scalaguide/forms/scalaformhelper/views/register.scala.html

フィールドが空の場合であっても、min パラメータに指定した個数の input 要素が生成されます。

Next: CSRF 対策


このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。