Вложенные формы в Symfony пустые после отправки формы

У меня вопрос, связанный с вложенными формами в 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 пуст. Любые идеи ? Спасибо заранее

Вложенные формы не допускаются спецификацией HTML5. поэтому вы можете столкнуться с причудливым поведением в разных браузерах.

JohnnyJS 25.05.2018 17:18

Кстати, при редактировании отлично работает в обоих случаях: с ошибками при отправке формы и без них.

klsdskldsd 25.05.2018 17:23

покажи свой конструктор форм

Andrew Vakhniuk 25.05.2018 17:55

добавлено в сообщение

klsdskldsd 25.05.2018 18:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
4
276
1

Ответы 1

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

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