Вот как я это сделал в шаблоне формы:
{{ form_errors(form.addresses) }}
{% for address in form.addresses %}
<div id="{{ 'address%sDivId'|format(loop.index) }}" class="userAddressItem">
<h5> Address #{{ loop.index }}</h5>
{{ form_errors(address) }}
{{ form_widget(address) }}
</div>
{% endfor %}
И у меня есть небольшая панель действий, управляемая jQuery, которая позволяет пользователю добавлять и удалять адреса. Это простой скрипт, добавляющий новый div в контейнер с правильным HTML-кодом. Для HTML я просто использовал тот же вывод, что и Symfony, но с обновленным индексом. Например, это будет вывод для входного текста улицы формы AddressType
:
<input id="user_addresses_0_street" name="user[addresses][0][street]" ...>
Тогда следующий индекс, который Symfony примет, равен 1, поэтому добавляемое новое поле ввода будет выглядеть так:
<input id="user_addresses_1_street" name="user[addresses][1][street]" ...>
Примечание: три точки являются заменой для required="required" maxlength="255"
, но могут меняться в зависимости от ваших потребностей.
Вам понадобится больше HTML-кода, чем для добавления нового AddressType
в DOM браузера, но это даст вам общее представление.
С уважением,
Matt