|
1 |
| -このページの翻訳はまだ行われていません。 |
2 |
| -======================================== |
| 1 | +.. index:: |
| 2 | + single: Forms; Twig form function reference |
| 3 | + |
| 4 | +Twig テンプレートのフォーム関数と変数 |
| 5 | +================================================== |
| 6 | + |
| 7 | +テンプレートでフォームを扱うとき、二つの強力な道具があります。 |
| 8 | + |
| 9 | +* フォームの各部を出力する:ref:`関数 <reference-form-twig-functions> |
| 10 | +* フィールドについてのあらゆる情報が取得できる:ref:`変数 <twig-reference-form-variables>` |
| 11 | + |
| 12 | +関数はフィールドを出力するのによく使われます。一方、変数は普通はそれほど使いませんが、フィールドのラベル・ID属性・エラー、その他フィールドに関するあらゆる情報を利用することができ、とても強力です。 |
| 13 | + |
| 14 | +.. _reference-form-twig-functions: |
| 15 | + |
| 16 | +Form 出力関数 |
| 17 | +------------------------ |
| 18 | + |
| 19 | +このマニュアルではフォームを出力するためのありとあらゆる Twig 関数を掲載しています。様々な関数がありますが、それぞれが違うフォーム部品の出力に対応しています。(例えば、ラベル、エラーメッセージ、ウィジェットなど) |
| 20 | + |
| 21 | +.. _reference-forms-twig-form: |
| 22 | + |
| 23 | +form(view, variables) |
| 24 | +--------------------- |
| 25 | + |
| 26 | +フォーム全体のHTMLを出力します。 |
| 27 | + |
| 28 | +.. code-block:: jinja |
| 29 | +
|
| 30 | + {# フォームを出力し、submitメソッドを変更します #} |
| 31 | + {{ form(form, {'method': 'GET'}) }} |
| 32 | +
|
| 33 | +主にアプリケーションのプロトタイプを作成するときや、カスタムフォームテーマを利用するときに使います。フォームを出力するときにもっと柔軟性がほしいなら、フォームの各部品を出力する他のヘルパーを利用した方が良いでしょう。 |
| 34 | + |
| 35 | +.. code-block:: jinja |
| 36 | +
|
| 37 | + {{ form_start(form) }} |
| 38 | + {{ form_errors(form) }} |
| 39 | +
|
| 40 | + {{ form_row(form.name) }} |
| 41 | + {{ form_row(form.dueDate) }} |
| 42 | +
|
| 43 | + {{ form_row(form.submit, { 'label': '送信' }) }} |
| 44 | + {{ form_end(form) }} |
| 45 | +
|
| 46 | +.. _reference-forms-twig-start: |
| 47 | + |
| 48 | +form_start(view, variables) |
| 49 | +--------------------------- |
| 50 | + |
| 51 | +フォームの開始タグを出力します。設定されたメソッドとアクションを考慮します。 |
| 52 | +フォームがファイルアップロードを含んでいれば、適切な ``enctype`` も出力します。 |
| 53 | + |
| 54 | +.. code-block:: jinja |
| 55 | +
|
| 56 | + {# 開始タグを出力し、送信メソッドを変更します #} |
| 57 | + {{ form_start(form, {'method': 'GET'}) }} |
| 58 | +
|
| 59 | +.. _reference-forms-twig-end: |
| 60 | + |
| 61 | +form_end(view, variables) |
| 62 | +------------------------- |
| 63 | + |
| 64 | +フォームの終了タグを出力します。 |
| 65 | + |
| 66 | +.. code-block:: jinja |
| 67 | +
|
| 68 | + {{ form_end(form) }} |
| 69 | +
|
| 70 | +``render_rest`` をfalseにセットしない限り、 ``form_rest()`` も出力します。 |
| 71 | + |
| 72 | +.. code-block:: jinja |
| 73 | +
|
| 74 | + {# 未出力のフィールドを出力しません #} |
| 75 | + {{ form_end(form, {'render_rest': false}) }} |
| 76 | +
|
| 77 | +.. _reference-forms-twig-label: |
| 78 | + |
| 79 | +form_label(view, label, variables) |
| 80 | +---------------------------------- |
| 81 | + |
| 82 | +指定したフィールドのラベルを出力します。第二引数として、このフィールドに出力したいラベルを渡すこともできます。 |
| 83 | + |
| 84 | +.. code-block:: jinja |
| 85 | +
|
| 86 | + {{ form_label(form.name) }} |
| 87 | +
|
| 88 | + {# 下記の二つの書き方は同じ意味になります #} |
| 89 | + {{ form_label(form.name, 'お名前', {'label_attr': {'class': 'foo'}}) }} |
| 90 | + {{ form_label(form.name, null, {'label': 'お名前', 'label_attr': {'class': 'foo'}}) }} |
| 91 | +
|
| 92 | +``variables`` について詳しくは ":ref:`twig-reference-form-variables`" を参照してください。 |
| 93 | + |
| 94 | +.. _reference-forms-twig-errors: |
| 95 | + |
| 96 | +form_errors(view) |
| 97 | +----------------- |
| 98 | + |
| 99 | +指定したフィールドのエラーを出力します。 |
| 100 | + |
| 101 | +.. code-block:: jinja |
| 102 | +
|
| 103 | + {{ form_errors(form.name) }} |
| 104 | +
|
| 105 | + {# グローバルなエラーを出力します #} |
| 106 | + {{ form_errors(form) }} |
| 107 | +
|
| 108 | +.. _reference-forms-twig-widget: |
| 109 | + |
| 110 | +form_widget(view, variables) |
| 111 | +---------------------------- |
| 112 | + |
| 113 | +指定したフィールドの HTML ウィジェットを出力します。 |
| 114 | +フォーム全体やフォームの集合に対して使用すると、それに含まれている全フィールドの各行を出力します。 |
| 115 | + |
| 116 | +.. code-block:: jinja |
| 117 | +
|
| 118 | + {# ウィジェットを出力し、 "foo" クラスを追加します #} |
| 119 | + {{ form_widget(form.name, {'attr': {'class': 'foo'}}) }} |
| 120 | +
|
| 121 | +``form_widget`` の第二引数は変数の配列です。 |
| 122 | +一番よく使われるのは ``attr`` で、HTMLウィジェットに追加する属性の配列です。フィールドのタイプによってはテンプレートに関係する他の変数も渡すことができます。 |
| 123 | +``attributes`` は一度に多数のフィールドを出力するときでも(たとえば、 ``form_widget(form)`` としたとき)再帰しません。 |
| 124 | + |
| 125 | +``variables`` についての詳細は ":ref:`twig-reference-form-variables`" を参照してください。 |
| 126 | + |
| 127 | +.. _reference-forms-twig-row: |
| 128 | + |
| 129 | +form_row(view, variables) |
| 130 | +------------------------- |
| 131 | + |
| 132 | +指定したフィールドの「行」、つまりラベル・エラーメッセージ・ウィジェットの組み合わさったものを出力します。 |
| 133 | + |
| 134 | +.. code-block:: jinja |
| 135 | +
|
| 136 | + {# 行を出力しますが、ラベルはfooに変更します #} |
| 137 | + {{ form_row(form.name, {'label': 'foo'}) }} |
| 138 | +
|
| 139 | +``form_row`` の第二引数は変数の配列です。 |
| 140 | +上の例のように、 Symfony で提供されているテンプレートではラベルのみ上書きすることができます。 |
| 141 | + |
| 142 | +``variables`` について詳細は ":ref:`twig-reference-form-variables`" を参照してください。 |
| 143 | + |
| 144 | +.. _reference-forms-twig-rest: |
| 145 | + |
| 146 | +form_rest(view, variables) |
| 147 | +-------------------------- |
| 148 | + |
| 149 | +指定したフォームについてまだ出力されていない全てのフィールドを出力します。 |
| 150 | +hidden フィールドや、出力し忘れたフィールドを出力してくれるので、いつもこのヘルパーを入れておくと便利です。 |
| 151 | + |
| 152 | +.. code-block:: jinja |
| 153 | +
|
| 154 | + {{ form_rest(form) }} |
| 155 | +
|
| 156 | +.. _reference-forms-twig-enctype: |
| 157 | + |
| 158 | +form_enctype(view) |
| 159 | +------------------ |
| 160 | + |
| 161 | +.. note:: |
| 162 | + |
| 163 | + このヘルパーは Symfony 2.3 で廃止され、 Symfony 3.0 で削除される予定です。代わりに ``form_start()`` を使用してください。 |
| 164 | + |
| 165 | +フォームに少なくとも一つのファイルアップロードフィールドがあるとき、このヘルパーは必要な ``enctype="multipart/form-data"`` フォーム属性を出力します。 form タグにいつでもこれを含めておくと便利です。 |
| 166 | + |
| 167 | +.. code-block:: html+jinja |
| 168 | + |
| 169 | + <form action="{{ path('form_submit') }}" method="post" {{ form_enctype(form) }}> |
| 170 | + |
| 171 | +Form テストリファレンス |
| 172 | +-------------------------- |
| 173 | + |
| 174 | +テストは、 ``is`` と一緒に使うことで条件を作ることができます。 |
| 175 | +詳しくは `Twig ドキュメント`_ を参照してください。 |
| 176 | + |
| 177 | +.. _form-twig-selectedchoice: |
| 178 | + |
| 179 | +selectedchoice(selected_value) |
| 180 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 181 | + |
| 182 | +このテストは、現在の選択肢が ``selected_value`` に等しいかどうかを調べます。 ``selected_value`` が配列のときには、現在の選択肢が ``selected_value`` の配列の中に含まれているかどうかを調べます。 |
| 183 | + |
| 184 | +.. code-block:: jinja |
| 185 | +
|
| 186 | + <option {% if choice is selectedchoice(value) %} selected="selected"{% endif %} ...> |
| 187 | +
|
| 188 | +.. _`twig-reference-form-variables`: |
| 189 | + |
| 190 | +フォーム変数の詳細 |
| 191 | +------------------------- |
| 192 | + |
| 193 | +.. tip:: |
| 194 | + |
| 195 | + 全てのフォーム変数の一覧は :ref:`reference-form-twig-variables` にあります。 |
| 196 | + |
| 197 | +上に出てきたほとんど全ての Twig 関数では、最後の引数はフォームの一部分を出力する時に使われる変数の配列です。 |
| 198 | +例えば、次のコードはフィールドのウィジェットを出力しますが、特別なクラスを含めるように変更されています。 |
| 199 | + |
| 200 | +.. code-block:: jinja |
| 201 | +
|
| 202 | + {# ウィジェットを出力し、 "foo" クラスを追加します #} |
| 203 | + {{ form_widget(form.name, { 'attr': {'class': 'foo'} }) }} |
| 204 | +
|
| 205 | +この変数の配列の目的(どこから来て何をするのか)はわかりにくいかもしれませんが、信じられないぐらい強力です。 |
| 206 | +フォームのどの部分を出力するときでも、その部分を出力するブロックはたくさんの変数を使います。 |
| 207 | +デフォルトでは、ブロックは `form_div_layout.html.twig`_ の中に書かれています。 |
| 208 | + |
| 209 | +一例として ``form_label`` を見てみましょう。 |
| 210 | + |
| 211 | +.. code-block:: jinja |
| 212 | +
|
| 213 | + {% block form_label %} |
| 214 | + {% if not compound %} |
| 215 | + {% set label_attr = label_attr|merge({'for': id}) %} |
| 216 | + {% endif %} |
| 217 | + {% if required %} |
| 218 | + {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required')|trim}) %} |
| 219 | + {% endif %} |
| 220 | + {% if label is empty %} |
| 221 | + {% set label = name|humanize %} |
| 222 | + {% endif %} |
| 223 | + <label{% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}>{{ label|trans({}, translation_domain) }}</label> |
| 224 | + {% endblock form_label %} |
| 225 | +
|
| 226 | +このブロックはいくつか変数を使っています。すなわち、 ``compound``, ``label_attr``, ``required``, |
| 227 | +``label``, ``name`` そして ``translation_domain`` です。 |
| 228 | +変数はフォームレンダリング機構によって利用可能になっています。しかし、もっと重要なことは、この変数は開発者が ``form_label`` を呼び出すときに(上の例はラベルを出力する時のものなので)上書きすることができるということです。 |
| 229 | + |
| 230 | +上書きできる変数はフォームのどの部分を出力しようとしているか(例えば、ラベルかウィジェットか)、あるいはどのフィールドを出力しようとしているか(例えば、 ``choice`` ウィジェットには ``expanded`` という追加オプションがあります)によって異なります。 |
| 231 | +`form_div_layout.html.twig`_ には全てのオプションが網羅されています。 |
| 232 | + |
| 233 | +.. tip:: |
| 234 | + |
| 235 | + 内部的には、変数は Form コンポーネントがフォームの各ノードについて ``buildView`` や ``finishView`` を呼び出したときに ``FormView`` によって利用可能になります。 |
| 236 | + 特定のフィールドについてどんなビュー変数が利用できるのか知りたいときは、そのフォームフィールド(および親のフィールド)のソースコードを調べ、上の二つのメソッドを見てください。 |
| 237 | + |
| 238 | +.. note:: |
| 239 | + |
| 240 | + フォーム全体(あるいは埋め込みフォーム全体)を一度に出力する場合は、 ``variables`` 引数はそのフォーム自身のみに適用され、フォームの子要素には適用されません。 |
| 241 | + つまり、下のサンプルコードでは、 "foo" クラス属性はフィールドには適用され **ません** 。 |
| 242 | + |
| 243 | + .. code-block:: jinja |
| 244 | +
|
| 245 | + {# 機能しません。変数は再帰しないため。 #} |
| 246 | + {{ form_widget(form, { 'attr': {'class': 'foo'} }) }} |
| 247 | +
|
| 248 | +.. _reference-form-twig-variables: |
| 249 | + |
| 250 | +Form 変数リファレンス |
| 251 | +~~~~~~~~~~~~~~~~~~~~~~~~ |
| 252 | + |
| 253 | +下の変数は全てのフィールドタイプに共通です。フィールドタイプの中にはもっと多くの変数があるものもあり、特定のフィールドのみに有効な変数もあります。 |
| 254 | + |
| 255 | +テンプレートに ``form`` 変数が含まれていて ``name`` フィールドの変数にアクセスしたいとき、 :class:`Symfony\\Component\\Form\\FormView` オブジェクトの ``vars`` プロパティを使うことによりアクセスできます。 |
| 256 | + |
| 257 | +.. configuration-block:: |
| 258 | + |
| 259 | + .. code-block:: html+jinja |
| 260 | + |
| 261 | + <label for="{{ form.name.vars.id }}" |
| 262 | + class="{{ form.name.vars.required ? 'required' : '' }}"> |
| 263 | + {{ form.name.vars.label }} |
| 264 | + </label> |
| 265 | + |
| 266 | + .. code-block:: html+php |
| 267 | + |
| 268 | + <label for="<?php echo $view['form']->get('name')->vars['id'] ?>" |
| 269 | + class="<?php echo $view['form']->get('name')->vars['required'] ? 'required' : '' ?>"> |
| 270 | + <?php echo $view['form']->get('name')->vars['label'] ?> |
| 271 | + </label> |
| 272 | + |
| 273 | +.. versionadded:: 2.3 |
| 274 | + The ``method`` and ``action`` variables were introduced in Symfony 2.3. |
| 275 | + |
| 276 | +.. versionadded:: 2.4 |
| 277 | + ``submitted`` 変数は Symfony2.4 で追加されました。 |
| 278 | + |
| 279 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 280 | +| 変数名 | 使い方 | |
| 281 | ++========================+=====================================================================================+ |
| 282 | +| ``form`` | 現在の``FormView`` インスタンス | |
| 283 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 284 | +| ``id`` | 出力される ``id`` HTML属性 | |
| 285 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 286 | +| ``name`` | フィールド名 (例えば ``title``) ただし ``name`` HTML属性ではありません。 | |
| 287 | +| | ``name`` HTML属性は ``full_name`` です。 | |
| 288 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 289 | +| ``full_name`` | 出力される ``name`` HTML属性 | |
| 290 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 291 | +| ``errors`` | 個別のフィールドについての全てのエラーの配列d | |
| 292 | +| | (たとえば ``form.title.errors`` のように) | |
| 293 | +| | ``form.errors`` はフォームが正しいかどうかを調べるのに利用することはできません。| |
| 294 | +| | グローバルなエラーしか返さないので、 個別のフィールドにはエラーがある可能性があるからです。 |
| 295 | +| | 代わりに ``valid`` を使ってください。 | |
| 296 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 297 | +| ``submitted`` | フォームが送信されたかどうか ``true`` 又は ``false`` で返します。| |
| 298 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 299 | +| ``valid`` | フォーム全体にエラーが無いかどうか ``true`` 又は ``false`` で返します。 | |
| 300 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 301 | +| ``value`` | 出力時に利用される値(大抵の場合は ``value`` HTML属性) | |
| 302 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 303 | +| ``read_only`` | ``true`` であれば ``readonly="readonly"`` がフィールドに追加されます。 |
| 304 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 305 | +| ``disabled`` | ``true`` であれば ``disabled="disabled"`` がフィールドに追加されます。 | |
| 306 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 307 | +| ``required`` | ``true`` であれば ``required`` 属性がフィールドに追加され、HTML5のバリデーションを有効にします。 | |
| 308 | +| | さらに、 ``required`` クラスがラベルに追加されます。 | |
| 309 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 310 | +| ``max_length`` | エレメントに ``maxlength`` 属性を追加します。(2.5で廃止され、3.0で削除予定です。代わりに ``attr[maxlength]`` を使ってください) | |
| 311 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 312 | +| ``pattern`` | エレメントに ``pattern`` 属性を追加します。(2.5で廃止され、3.0で削除予定です。代わりに ``attr[pattern]`` を使ってください) | |
| 313 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 314 | +| ``label`` | 出力されるラベル文字列。 | |
| 315 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 316 | +| ``multipart`` | もし ``true`` なら、 ``form_enctype`` は ``enctype="multipart/form-data"`` を出力します。 | |
| 317 | +| | 親のフォームだけに適用されます。 | |
| 318 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 319 | +| ``attr`` | フィールドに HTML 属性として出力される key-value 配列。 | |
| 320 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 321 | +| ``compound`` | フィールドが実際は子フィールドを保持しているかどうか。| |
| 322 | +| | (例えば ``choice`` フィールドがあるときに、それがチェックボックスの集合で成り立っているかどうか。 | |
| 323 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 324 | +| ``block_prefixes`` | 親タイプ全ての名前の配列 | |
| 325 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 326 | +| ``translation_domain`` | 現在のフォームの翻訳ドメイン | |
| 327 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 328 | +| ``cache_key`` | キャッシュで利用される一意なキー | |
| 329 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 330 | +| ``data`` | タイプの変換された(ノーマライズされた)データ | |
| 331 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 332 | +| ``method`` | 現在のフォームのメソッド(GET, POSTなど) | |
| 333 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 334 | +| ``action`` | 現在のフォームのアクション | |
| 335 | ++------------------------+-------------------------------------------------------------------------------------+ |
| 336 | + |
| 337 | +.. _`form_div_layout.html.twig`: https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig |
| 338 | +.. _`Twig ドキュメント`: http://twig.sensiolabs.org/doc/templates.html#test-operator |
| 339 | + |
| 340 | +.. 2014/04/19 77web b4a0fb09a2e8a30345d8f4c86c7cd8f8662d6ce3 |
3 | 341 |
|
4 |
| -翻訳にご協力くださる方は |
5 |
| -`github/symfony-japan <https://github.com/symfony-japan/symfony-docs-ja/wiki>`_ まで! |
|
0 commit comments