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

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

  • Twig
    1
    2
    3
    4
    5
    6
    7
    {# app/Resources/views/default/new.html.twig #}
    {{ form_start(form) }}
        {{ form_errors(form) }}
    
        {{ form_row(form.task) }}
        {{ form_row(form.dueDate) }}
    {{ form_end(form) }}
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    <!-- app/Resources/views/default/newAction.html.php -->
    <?php echo $view['form']->start($form) ?>
        <?php echo $view['form']->errors($form) ?>
    
        <?php echo $view['form']->row($form['task']) ?>
        <?php echo $view['form']->row($form['dueDate']) ?>
    <?php echo $view['form']->end($form) ?>
    

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

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

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

Tip

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

  • Twig
    1
    {{ form.vars.value.task }}
    
  • PHP
    1
    <?php echo $form->vars['value']->getTask() ?>
    

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

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

  • Twig
     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) }}
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php echo $view['form']->start($form) ?>
    
        <?php echo $view['form']->errors($form) ?>
    
        <div>
            <?php echo $view['form']->label($form['task']) ?>
            <?php echo $view['form']->errors($form['task']) ?>
            <?php echo $view['form']->widget($form['task']) ?>
        </div>
    
        <div>
            <?php echo $view['form']->label($form['dueDate']) ?>
            <?php echo $view['form']->errors($form['dueDate']) ?>
            <?php echo $view['form']->widget($form['dueDate']) ?>
        </div>
    
        <div>
            <?php echo $view['form']->widget($form['save']) ?>
        </div>
    
    <?php echo $view['form']->end($form) ?>
    

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

  • Twig
    1
    {{ form_label(form.task, 'Task Description') }}
    
  • PHP
    1
    <?php echo $view['form']->label($form['task'], 'Task Description') ?>
    

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

  • Twig
    1
    {{ form_widget(form.task, {'attr': {'class': 'task_field'}}) }}
    
  • PHP
    1
    2
    3
    <?php echo $view['form']->widget($form['task'], array(
        'attr' => array('class' => 'task_field'),
    )) ?>
    

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

  • Twig
    1
    {{ form.task.vars.id }}
    
  • PHP
    1
    <?php echo $form['task']->vars['id']?>
    

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

  • Twig
    1
    {{ form.task.vars.full_name }}
    
  • PHP
    1
    <?php echo $form['task']->vars['full_name'] ?>
    

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

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

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.