Поля групповой формы в Symfony2
Я хочу сгруппировать поля в symfony2. Например, оберните их в div и разместите заголовки между ними:
<form>
<div class="step-1">
<h3>Step 1</h3>
Field 1
Field 2
</div>
<div class="step-2">
<h3>Step 2</h3>
Field 3
Field 4
</div>
</form>
Проблема заключается в том, что у формы появилось очень много полей, поэтому я не могу сделать их один за другим в шаблоне. Есть ли какой-либо вариант при добавлении полей? Как:
$form = $this->createFormBuilder()
->addGroup('step-1')
Или как я могу справиться с этим?
Ответы
Ответ 1
Twig может помочь вам отобразить несколько полей с минимальным кодом:
<form>
<div class="step-1">
<h3>Step 1</h3>
{% for field in [ 'field1', 'field2']
if (attribute(form, field) is defined) %}
{{ form_row(attribute(form, field)) }}
{% endfor %}
</div>
<div class="step-2">
<h3>Step 2</h3>
{% for field in [
'field3',
'field4',
'field5',
'field6'
] if (attribute(form, field) is defined) %}
{{ form_row(attribute(form, field)) }}
{% endfor %}
</div>
{# Display the other fields #}
{{ form_rest(form) }}
</form>
Ответ 2
Я узнал, согласно этому сообщению (спасибо "n.1" за ссылку), можно сгруппировать в контроллер:
$form = $this->createFormBuilder()
->add(
$this->createFormBuilder()->create('step1', 'form', array('virtual' => true))
->add('field1', 'text')
->add('field2', 'text')
)
Что дает следующий шаблон:
<div class="input-wrapper">
<label class="required">Step1</label>
<div id="form_step1">
<div class="input-wrapper">
<label class="required" for="form_step1_field1">Field1</label>
<input id="form_step1_field1" type="text" required="required" name="form[step1][field1]">
<input id="form_step1_field2" type="text" required="required" name="form[step1][field1]">
</div>
</div>
</div>
Что я могу тему, как я хочу. Но и "бшуссек" писал:
Структура в вашем классе формы не обязательно должна быть связана со структурой в вашем макете. Вы можете структурировать поля в HTML в зависимости от того, что вам нравится.
Итак, лучше всего не использовать контроллер для структурирования, и я должен предпочесть практику с "n.1"
Ответ 3
Структура в вашем классе формы не обязательно должна быть связана со структурой в вашем макете. Вы можете структурировать поля в HTML-формате в зависимости от того, что вам нравится. В вашем случае вы бы поставили свои заголовки так же, как в своем Q, например:
<div class="step-1">
<h3>Step 1</h3>
{{ form_widget(form.field1) }}
{{ form_widget(form.field2) }}
</div>
Если вам все еще интересно группировать формы (я не тестировал это):
$builder->add(
$builder->create('step1', 'form', array('virtual' => true))
->add('field1', 'text')
->add('field2', 'text')
);
Источник.