Создание темы формы Symfony2 - Fieldset и стиль списка

Я использую Symfony2. Я пытаюсь переопределить блоки формы стиля div по умолчанию в ветке.

Во-первых, кто-нибудь знает или знает о доступной реализации подхода fieldset и list (ul -> li)?

4 ответа

На данный момент я реализовал поддержку fieldset следующим образом:

в Типе:

public function buildView(FormView $view, FormInterface $form, array $options)
{
    $view->setAttribute('fieldsets',
            array(
                array(
                    'legend' => 'film.group.date',
                    'content'=> array(
                        'theaters_release_date',
                        'storage_media_release',
                        'storage_media_release_date',
                        'vod_release_date'
                        )),
                array(
                    'legend' => 'film.group.country',
                    'content'=> array('countries')),
                    ));
}

У меня есть шаблон с именем fieldset.html.twig, который использует атрибуты представления:

{% macro fieldset_block(fieldset, form) %}
<fieldset{% if fieldset.subform is defined %} class="{{ fieldset.subform }}"{% endif %}>
    <legend>{{fieldset.legend | trans }}</legend>
    {% if fieldset.content is defined%}
      {% for row in fieldset.content %}
          {{ form_row(form[row]) }}
      {% endfor %}
    {% endif %}
    {% if fieldset.subform is defined %}
        {# Couldn't get some recursivity (simply call form widget) here... too bad #}
        {% if form[fieldset.subform].get('attr').fieldsets is defined %}
            {% for subfieldset in form[fieldset.subform].get('attr').fieldsets %}
                {{ _self.fieldset_block(subfieldset, form[fieldset.subform]) }}
            {% endfor %}
        {% else %}
            {% for row in form[fieldset.subform] %}
                {{ form_row(row) }}
            {% endfor %}
        {% endif %}
    {% endif %}
    {% if fieldset.items is defined%}
      {% for fieldset in fieldset.items %}
          {{ _self.fieldset_block(fieldset, form) }}
      {% endfor %}
    {% endif %}
</fieldset>
{%  endmacro %}

{% block form_widget %}
    {% for fieldset in form.get('attr').fieldsets %}
        {{ _self.fieldset_block(fieldset, form) }}
    {% endfor %}
{% endblock %}

Вот простой пример набора полей: https://gist.github.com/spcmky/8512371

Чтобы заменить div списком, посмотрите на form_widget_compound и form_rows. Вы можете:

{% block fieldset_widget %}
    {% spaceless %}
        <fieldset {{ block('widget_container_attributes') }}>
            {% if title is defined %}<legend>{{ title }}</legend>{% endif %}
                <ul>
                {% for child in form %}
                    <li>
                        {{ form_widget(child) }}
                    </li>
                {% endfor %}
                </ul>
        </fieldset>
    {% endspaceless %}
{% endblock %}

По умолчанию Twig использует макет div при визуализации форм. Однако вы можете визуализировать формы в макете таблицы. Используйте ресурс form_table_layout.html.twig для использования такого макета:

# app/config/config.yml

twig:
    form:
        resources: ['form_table_layout.html.twig']

http://symfony.com/doc/2.0/cookbook/form/form_customization.html

Я не знаю о реализации thoose, но вы можете сделать их и открыть запрос на извлечение.

Другие вопросы по тегам