form.html.twig 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. {% block row %}
  2. {% spaceless %}
  3. <div>
  4. {{ field.renderer.label }}
  5. {{ field.renderer.errors }}
  6. {{ field.renderer.widget }}
  7. </div>
  8. {% endspaceless %}
  9. {% endblock row %}
  10. {% block errors %}
  11. {% spaceless %}
  12. {% if field.hasErrors %}
  13. <ul>
  14. {% for error in field.errors %}
  15. <li>{% trans error.messageTemplate with error.messageParameters from 'validators' %}</li>
  16. {% endfor %}
  17. </ul>
  18. {% endif %}
  19. {% endspaceless %}
  20. {% endblock errors %}
  21. {% block hidden %}
  22. {% spaceless %}
  23. {% for child in field.allHiddenFields %}
  24. {{ child.renderer.widget }}
  25. {% endfor %}
  26. {% endspaceless %}
  27. {% endblock hidden %}
  28. {% block label %}
  29. {% spaceless %}
  30. <label for="{{ id }}">{% trans label %}</label>
  31. {% endspaceless %}
  32. {% endblock label %}
  33. {% block attributes %}
  34. {% spaceless %}
  35. {% for key, value in attr %}
  36. {{ key }}="{{ value }}"
  37. {% endfor %}
  38. {% endspaceless %}
  39. {% endblock attributes %}
  40. {% block field_attributes %}
  41. {% spaceless %}
  42. id="{{ id }}" name="{{ name }}"{% if field.disabled %} disabled="disabled"{% endif %}{% if field.required %} required="required"{% endif %}
  43. {{ block('attributes') }}
  44. {% endspaceless %}
  45. {% endblock field_attributes %}
  46. {% block form__widget %}
  47. {% spaceless %}
  48. {{ field.renderer.errors }}
  49. {% for child in field.visibleFields %}
  50. {{ child.renderer.row }}
  51. {% endfor %}
  52. {{ field.renderer.hidden }}
  53. {% endspaceless %}
  54. {% endblock form__widget %}
  55. {% block collection__widget %}
  56. {{ block('form__widget') }}
  57. {% endblock collection__widget %}
  58. {% block text__widget %}
  59. {% spaceless %}
  60. {% if attr.type is defined and attr.type != "text" %}
  61. <input {{ block('field_attributes') }} value="{{ field.displayedData }}" />
  62. {% else %}
  63. {% if attr.maxlength is not defined and max_length is defined %}
  64. {% set attr = attr|merge({ 'maxlength': max_length }) %}
  65. {% endif %}
  66. <input type="text" {{ block('field_attributes') }} value="{{ field.displayedData }}" />
  67. {% endif %}
  68. {% endspaceless %}
  69. {% endblock text__widget %}
  70. {% block password__widget %}
  71. {% spaceless %}
  72. {% set attr = attr|merge({ 'maxlength': attr.maxlength|default(field.maxlength) }) %}
  73. <input type="password" {{ block('field_attributes') }} value="{{ field.displayedData }}" />
  74. {% endspaceless %}
  75. {% endblock password__widget %}
  76. {% block hidden__widget %}
  77. {% spaceless %}
  78. <input type="hidden" id="{{ id }}" name="{{ name }}"{% if field.disabled %} disabled="disabled"{% endif %} value="{{ field.displayedData }}" />
  79. {% endspaceless %}
  80. {% endblock hidden__widget %}
  81. {% block textarea__widget %}
  82. {% spaceless %}
  83. <textarea {{ block('field_attributes') }}>{{ field.displayedData }}</textarea>
  84. {% endspaceless %}
  85. {% endblock textarea__widget %}
  86. {% block options %}
  87. {% spaceless %}
  88. {% for choice, label in options %}
  89. {% if field.isChoiceGroup(label) %}
  90. <optgroup label="{{ choice }}">
  91. {% for nestedChoice, nestedLabel in label %}
  92. <option value="{{ nestedChoice }}"{% if field.isChoiceSelected(nestedChoice) %} selected="selected"{% endif %}>{{ nestedLabel }}</option>
  93. {% endfor %}
  94. </optgroup>
  95. {% else %}
  96. <option value="{{ choice }}"{% if field.isChoiceSelected(choice) %} selected="selected"{% endif %}>{{ label }}</option>
  97. {% endif %}
  98. {% endfor %}
  99. {% endspaceless %}
  100. {% endblock options %}
  101. {% block choice__widget %}
  102. {% spaceless %}
  103. {% if field.isExpanded %}
  104. {% for choice, child in field %}
  105. {{ child.renderer.widget }}
  106. <label for="{{ id }}">{{ field.label(choice) }}</label>
  107. {% endfor %}
  108. {% else %}
  109. <select {{ block('field_attributes') }}{% if field.isMultipleChoice %} multiple="multiple"{% endif %}>
  110. {% if field.preferredChoices|length > 0 %}
  111. {% set options = field.preferredChoices %}
  112. {{ block('options') }}
  113. <option disabled="disabled">{{ params.separator|default('-------------------') }}</option>
  114. {% endif %}
  115. {% set options = field.otherChoices %}
  116. {{ block('options') }}
  117. </select>
  118. {% endif %}
  119. {% endspaceless %}
  120. {% endblock choice__widget %}
  121. {% block checkbox__widget %}
  122. {% spaceless %}
  123. <input type="checkbox" {{ block('field_attributes') }}{% if field.hasValue %} value="{{ field.value }}"{% endif %}{% if field.ischecked %} checked="checked"{% endif %} />
  124. {% endspaceless %}
  125. {% endblock checkbox__widget %}
  126. {% block radio__widget %}
  127. {% spaceless %}
  128. <input type="radio" {{ block('field_attributes') }}{% if field.hasValue %} value="{{ field.value }}"{% endif %}{% if field.ischecked %} checked="checked"{% endif %} />
  129. {% endspaceless %}
  130. {% endblock radio__widget %}
  131. {% block date_time__widget %}
  132. {% spaceless %}
  133. {{ field.date.renderer.errors }}
  134. {{ field.time.renderer.errors }}
  135. {{ field.date.renderer.widget }}
  136. {{ field.time.renderer.widget }}
  137. {% endspaceless %}
  138. {% endblock date_time__widget %}
  139. {% block date__widget %}
  140. {% spaceless %}
  141. {% if field.isField %}
  142. {{ block('text__widget') }}
  143. {% else %}
  144. {{ date_pattern|replace({
  145. '{{ year }}': field.year.renderer.widget,
  146. '{{ month }}': field.month.renderer.widget,
  147. '{{ day }}': field.day.renderer.widget
  148. })|raw }}
  149. {% endif %}
  150. {% endspaceless %}
  151. {% endblock date__widget %}
  152. {% block time__widget %}
  153. {% spaceless %}
  154. {% if field.isField %}{% set attr = attr|merge({ 'size': 1 }) %}{% endif %}
  155. {{ field.hour.renderer.widget(attr) }}:{{ field.minute.renderer.widget(attr) }}{% if field.isWithSeconds %}:{{ field.second.renderer.widget(attr) }}{% endif %}
  156. {% endspaceless %}
  157. {% endblock time__widget %}
  158. {% block number__widget %}
  159. {% spaceless %}
  160. {% set attr = attr|merge({ 'type': 'number' }) %}
  161. {{ block('text__widget') }}
  162. {% endspaceless %}
  163. {% endblock number__widget %}
  164. {% block money__widget %}
  165. {% spaceless %}
  166. {{ money_pattern|replace({ '{{ widget }}': block('text__widget') })|raw }}
  167. {% endspaceless %}
  168. {% endblock money__widget %}
  169. {% block url__widget %}
  170. {% spaceless %}
  171. {% set attr = attr|merge({ 'type': 'url' }) %}
  172. {{ block('text__widget') }}
  173. {% endspaceless %}
  174. {% endblock url__widget %}
  175. {% block percent__widget %}
  176. {% spaceless %}
  177. {{ block('text__widget') }} %
  178. {% endspaceless %}
  179. {% endblock percent__widget %}
  180. {% block file__widget %}
  181. {% spaceless %}
  182. {% set group = field %}
  183. {% set field = group.file %}
  184. <input type="file" {{ block('field_attributes') }} />
  185. {{ group.token.renderer.widget }}
  186. {{ group.original_name.renderer.widget }}
  187. {% endspaceless %}
  188. {% endblock file__widget %}