Документация для CollectionType на самом деле довольно хорошая, но, возможно, некоторые конкретные детали требуют повторения.
Сначала в документации рассказывается, как визуализировать элементы коллекции (вероятно, ваши слоты):
<ul class="tags">
{# iterate over each existing tag and render its only field: name #}
{% for tag in form.tags %}
<li>{{ form_row(tag.name) }}</li>
{% endfor %}
</ul>
Это то, чего не хватает в вашем деле.Просто чтобы избежать путаницы, их <ul class="tags">
- это ваша <div id="slot-fields-list" ...>
.Вы должны пройти через form.slot
с
{% for slot in form.slot %}
{{ form_row(slot) }} <!--- or render your sub-form properly -->
{% endfor %}
сейчас.Symfony очень неохотно опускает элементы формы.Поэтому, когда вы помещаете {{ form_end(form) }}
, он будет отображать остальные элементы формы, которые не были отрисованы ранее, в вашу форму перед закрытием <form>
.(такое же поведение может быть достигнуто с помощью {{ form_rest(form) }}
, если вам это когда-либо понадобится)
Именно поэтому ваши подчиненные формы появятся после вашей кнопки отправки и будут полностью неуместны - потому что они не были отображеныгде-нибудь раньше.
Однако это еще не объясняет пропущенное data-prototype
, но, возможно, есть и простое объяснение ...
, которое вы, возможно, уже знаете о форме Темы , где вы можете добавить свой собственный slot_widget, slot_row, slot_label и сделать так, чтобы Symfony сделал для вас все эти странные включаемые вещи.