Як контролювати відображення у формі

Дата оновлення перекладу 2023-06-22

Як контролювати відображення у формі

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

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:

1
{{ form.vars.value.task }}

Відображення кожного поля вручну

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

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) }}

Якщо автоматично згенерований ярлик поля не зовсім правильний, ви можете ясно вказати його:

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

Деякі типи полів мають додаткові опції відображення, які можна передати у віджет. Ці опції документовані в кожному типі, але однією спільною опцією є attr, яка дозволяє вам змінювати атрибути елемента форми. Наступний код додасть клас task_field до відображеного виведення текстового поля:

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

Якщо вам потрібно відобразити поля форми "вручну", тоді ви можете отримати доступ до індивідуальних значень полів, таких як id, name і label. Наприклад, щоб отримати id:

1
{{ form.task.vars.id }}

Щоб отримати значення, використане для атрибута імені поля форми, вам потрібно використовувати значення full_name:

1
{{ form.task.vars.full_name }}

Довідник функцій шаблону Twig

Якщо ви використовуєте Twig, повний довідник функцій відображення форми доступний у довідковому керівництві . Прочитайте його, щоб знати все про доступних помічників та опції, які можна використовувати з кожним із них.