У меня вопрос, связанный с вложенными формами в symfony. У меня есть эта форма
{{ form_start(form, {'attr': {'class': 'needs-validation'}} ) }}
....
<div id = "slot-fields-list" data-prototype = "
{% filter escape %}
{% include 'slot/form/prototype.html.twig' with {'form': form.slot.vars.prototype} %}
{% endfilter %}"
data-widget-tags = "{{ '<span></span>'|e }}">
</div>
{{ form_end(form) }}
.......................................
->add('slot', CollectionType::class, [
'entry_type' => SlotType::class,
'entry_options' => ['label' => false],
'label' => false,
'allow_add' => true,
'allow_delete' => true,
'error_bubbling' => false
])
Работает нормально, у меня есть данные в data-prototype после шаблона рендеринга. Когда я отправляю форму и в ней есть ошибки, эта вложенная форма добавляется после кнопки отправки, а data-prototype пуст. Любые идеи ? Спасибо заранее
Кстати, при редактировании отлично работает в обоих случаях: с ошибками при отправке формы и без них.
покажи свой конструктор форм
добавлено в сообщение




документация для 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 делать все эти странные подключаемые материалы за вас.
Вложенные формы не допускаются спецификацией HTML5. поэтому вы можете столкнуться с причудливым поведением в разных браузерах.