Как контролировать отображение в форме

Как контролировать отображение в форме

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

  • Twig
  • PHP
1
2
3
4
5
6
7
{# templates/default/new.html.twig #}
{{ form_start(form) }}
    {{ form_errors(form) }}

    {{ form_row(form.task) }}
    {{ form_row(form.dueDate) }}
{{ form_end(form) }}

Вы уже знаете функции form_start() и form_end(), но что делают другие функции?

form_errors(form)
Отображает любые ошибки глобально по всей форме (ошибки полей отображаются рядом с каждым полем).
form_row(form.dueDate)
Отображает ярлык, любые ошибки и HTML-виджет формы для данного поля (например, dueDate) по умолчанию, внутри элемента div.

Большинство работы делается помощником form_row(), который отображает ярлык, ошибки и HTML-виджет формы каждого поля внутри тега div по умолчанию. В разделе Как работать с темами формы, вы узнаете, как вывод form_row() может быть настроен на многих разных уровнях.

Tip

Вы можете получить доступ к текущим данным вашей формы через form.vars.value:

  • Twig
  • PHP
1
{{ form.vars.value.task }}

Отображение каждого поля вручную

Помощник form_row() прекрасен, так как вы можете очень быстро отобразить каждое поле вашей формы (и разметка, используемая для "строки" может быть также настроена). Но так как жизнь не всегда так проста, вы также можете отобразить каждое поле полностью вручную. Конечным результатом станет то же самое, что и при использовании помощника form_row():

  • Twig
  • PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{{ form_start(form) }}
    {{ form_errors(form) }}

    <div>
        {{ form_label(form.task) }}
        {{ form_errors(form.task) }}
        {{ form_widget(form.task) }}
    </div>

    <div>
        {{ form_label(form.dueDate) }}
        {{ form_errors(form.dueDate) }}
        {{ form_widget(form.dueDate) }}
    </div>

    <div>
        {{ form_widget(form.save) }}
    </div>

{{ form_end(form) }}

Если автоматически сгенерированный ярлык поля не совсем правильный, вы можете ясно указать его:

  • Twig
  • PHP
1
{{ form_label(form.task, 'Task Description') }}

Некоторые типы полей имеют дополнительные опции отображения, которые можно передать в виджет. Эти опции документированы в каждом типе, но одной общей опцией является attr, которая позволяет вам изменять атрибуты элемента формы. Следующий код добавит класс task_field к отображённому выводу текстового поля:

  • Twig
  • PHP
1
{{ form_widget(form.task, {'attr': {'class': 'task_field'}}) }}

Если вам нужно отобразить поля формы "вручную", тогда вы можете получить доступ к индивидуальным значениям полей, таким как id, name и label. Например, чтобы получить id:

  • Twig
  • PHP
1
{{ form.task.vars.id }}

Чтобы получить значение, использованное для атрибута имени поля формы, вам нужно использовать значение full_name:

  • Twig
  • PHP
1
{{ form.task.vars.full_name }}

Справочник функций шаблона Twig

Если вы используете Twig, полный справочник функций отображения формы доступен в справочном руководстве . Прочтите его, чтобы знать всё о доступных помощниках и опциях, которые можно использовать с кажлым из них.