symfony - 表单提交后,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
为空。有任何想法吗 ?提前谢谢
解决方案
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
with
{% for slot in form.slot %}
{{ form_row(slot) }} <!--- or render your sub-form properly -->
{% endfor %}
现在。Symfony 非常不愿意省略表单元素。因此,当您放置 a{{ form_end(form) }}
时,它将在关闭<form>
. {{ form_rest(form) }}
(如果您需要,可以通过 实现相同的行为)
这就是为什么您的子表单将出现在您的提交按钮之后并且完全不合适的原因 - 因为它们之前没有在任何地方呈现。
但是,这还不能解释缺失data-prototype
,但也许还有一个简单的解释......
您可能已经了解表单主题,您可以在其中添加自己的 slot_widget、slot_row、slot_label 并让 symfony 为您完成所有奇怪的包含内容。
推荐阅读
- aurelia - Aurelia setRoot 与浏览器后退按钮?
- python - 如何将表单数据传递到多个 sqlite3 行
- php - Laravel 路由重定向到错误的方法
- java - 如何反转短语中的单词顺序并反转单词中的字母?
- cassandra - 需要有关如何使用 Cassandra Kafka 连接器的帮助
- c - 检查数组中未初始化的结构
- ruby-on-rails - Rails:使用松弛工作区进行身份验证
- groovy - JMeter - 使用 Groovy 的 JsenEncrypt,因此不会在每个线程调用加密期间过载 js 负载
- java - 我如何将多个 json 对象附加到 json 文件的末尾
- python - 我将如何将此 txt 文件解析为 csv?