Новое в Symfony 5.2: Помощники полей форм

Symfony Forms помогает вам создавать и обрабатывать HTML—формы, абстрагируя все сложные и повторяющиеся вещи. Он также предоставляет множество утилит для визуализации содержимого формы, от инструкции render-all {{form (form)}} до отдельных помощников формы:

{{ form_start(form) }}
    <div class="my-custom-class-for-errors">
        {{ form_errors(form) }}
    </div>

    <div class="form-control">
        <i class="fa fa-calendar"></i> {{ form_label(form.dueDate) }}
        {{ form_widget(form.dueDate) }}

        <small>{{ form_help(form.dueDate) }}</small>

        <div class="form-error">
            {{ form_errors(form.dueDate) }}
        </div>
    </div>
{{ form_end(form) }}

Помощники form_*() отображают каждую часть поля формы, включая все необходимые элементы HTML. Большинству разработчиков нравится такое поведение, но некоторые дизайнеры борются с этим, потому что он скрывает весь HTML в темах форм, которыми им нелегко управлять.

Вот почему Symfony 5.2 представляет новые помощники формы Twig для рендеринга значения каждой части поля формы без добавления вокруг нее какого-либо HTML:

  • field_name
  • field_value
  • field_label
  • field_help
  • field_errors
  • field_choices (итератор выбора полей; например, для <select>)

При использовании этих помощников вы должны написать все содержимое HTML для всех полей формы, которые некоторые люди предпочитают лучше контролировать сгенерированный HTML без необходимости иметь дело с темами формы:

<input
    name="{{ field_name(form.username) }}"
    value="{{ field_value(form.username) }}"
    placeholder="{{ field_label(form.username) }}"
    class="form-control"
/>

<select name="{{ field_name(form.country) }}" class="form-control">
    <option value="">{{ field_label(form.country) }}</option>

    {% for label, value in field_choices(form.country) %}
        <option value="{{ value }}">{{ label }}</option>
    {% endfor %}
</select>