2014-09-21 3 views
1

Недавно я начал использовать платформу Symfony2.
Я уже извиняюсь за любую неправильную терминологию, которую я буду использовать.Настройка форм Symfony2

Я хотел бы настроить, как формы представлены в моем приложении.

Более конкретно, в моем файле Twig я рендеринг всей формы с

{{ form(forms) }} 

Я хотел бы настроить макет формы. Я знаю, что каждая строка формы может быть расширена

{{ form_start(forms) }} 

//... 
<div> 
    {{ form_label(forms.field) }} 
    {{ form_errors(forms.field) }} 
    {{ form_widget(forms.field) }} 
</div> 
//... 

{{ form_end(forms) }} 

С формой, написанной в этом формате я мог бы добавить необходимые настройки для макета.

Вот проблема: у моей формы нет заранее заданного количества строк, но они зависят от некоторых значений, хранящихся в базе данных. То, что я хотел бы сделать в своей Twig, примерно такое:

{{ form_start(forms) }} 

{% for field in forms %} 
<div> 
    {{ form_label(forms.field) }} 
    {{ form_errors(forms.field) }} 
    {{ form_widget(forms.field) }} 
</div> 
{% endfor %} 

{{ form_end(forms) }} 

К сожалению, этот цикл не работает. Я также изучал (How to Customize Form Rendering), но я думаю, что это не подходит моему делу (не так ли?).

Любое предложение?
Заранее благодарю вас за помощь.

ответ

1

Вам нужно настроить form_row методу http://symfony.com/doc/current/cookbook/form/form_customization.html#customizing-the-form-row

// my_form.html.twig 
{% extends 'form_div_layout.html.twig' %} 

{% block form_row %} 
    <div> 
     {{ form_label(form) }} 
     {{ form_errors(form) }} 
     {{ form_widget(form) }} 
    </div> 
{% endblock form_row %} 

// view.html.twig 
{% form_theme form 'my_form.html.twig' %} 
{{ form_start(form) }} 
+0

Да! Ты прав! Ответ был только под моими глазами ... Спасибо большое! – Alberto

0

В качестве более гибкого решения, вы можете делать то, что вы хотите прямо, не меняя пути все формы строки на форме тематические вместе.

Предполагая, что ваша главная форма содержит коллекцию (! Если нет, давайте теперь, как это делается) называется subforms с переменным числом элементов (в каждом из которых есть другая форма), вы можете сделать что-то вроде этого:

{{ form_start(forms) }} 

{% for subform in forms.subforms %} 
<div> 
    {{ form_label(subform.fieldname) }} 
    {{ form_errors(subform.fieldname) }} 
    {{ form_widget(subform.fieldname) }} 
</div> 
{% endfor %} 

{{ form_end(forms) }} 
Смежные вопросы