Пользовательские шаблоны коллекций в symfony2 - PullRequest
6 голосов
/ 09 января 2012

Можно ли добавить настраиваемые глобальные шаблоны для элементов в полях формы коллекции?

Я не хочу настраивать сам шаблон коллекции, но рендеринг каждого объекта в коллекции, например, для добавления определенного класса или разметки к каждому объекту, содержащемуся в коллекции.

У меня есть форма с полем коллекции, добавленным так:

$builder
    ->add('items', 'collection', array(
        'type' => new ItemType(),
        'allow_add' => true,
        'allow_delete' => true,
        'prototype' => true
    ));

Я хочу определить шаблон веточки для добавления кнопки «удалить» к каждому элементу в коллекции (среди прочего).

Я обнаружил, что есть шаблон 'collection_widget' для настройки коллекций, покупайте его только для самой коллекции, а не для отдельных элементов.

ПРИМЕЧАНИЕ 1. Мне нужно использовать глобальный шаблон, чтобы сделать это для всех коллекций во всех формах, я знаю, что могу решить это для каждого шаблона формы, но это не главное.

ПРИМЕЧАНИЕ 2. До сих пор я решил эту проблему с помощью jquery, добавив класс в collection_widget и добавив кнопки для всех его дочерних элементов с jquery. Пока это работает нормально, но я ищу 100% шаблонное решение без необходимости выполнять всю обработку jquery. В идеале это также должно работать с прототипом строки для добавления новых элементов.

1 Ответ

13 голосов
/ 23 января 2012

Наконец-то я нашел хорошее решение для этого.Во-первых, мне пришлось создать собственный шаблон collection_widget (скопированный из общего form_widget), и вместо вызова блока form_rows я вызываю блок collection_rows, который является настройкой блока form_rows.Внутри блока collection_rows вы можете настроить все, что захотите, я просто добавил собственный класс для каждого дочернего элемента.

Вот два шаблона:

{% block collection_widget %}
{% spaceless %}
    <div {{ block('widget_container_attributes') }}>
        {{ block('collection_rows') }}
        {{ form_rest(form) }}
    </div>
{% endspaceless %}
{% endblock collection_widget %}

{% block collection_rows %}
{% spaceless %}
    {{ form_errors(form) }}
    {% for child in form %}
        {{ form_row(child, {'attr':{'class':'collection-item'}}) }}
    {% endfor %}
{% endspaceless %}
{% endblock collection_rows %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...