Вложенные формы в symfony пустые после отправки формы - PullRequest
0 голосов
/ 25 мая 2018

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

1 Ответ

0 голосов
/ 25 мая 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...