我做的和这里解释的一样:http: //symfony.com/doc/current/cookbook/form/form_collections.html
但就我而言,我想添加新的“标签”,而不是通过单击链接手动添加,而是自动添加。我给我的模板一个包含项目的数组,并且我想为每个项目添加一个新表单 - 项目的数量应该等于表单的数量。
如果可能的话,我更喜欢这样的解决方案:
{% for i in items %}
{{ i.name }} {{ form_widget(form.tags[loop.index0].name) }}
{% endfor %}
但是如何在控制器中自动创建对象呢?它告诉我没有 index=1 的对象,是的 - 没有,但没有办法自动创建它们,并且不需要在我的控制器中创建例如 10 个相同类型的空对象?:(
我在想的另一件事是这样的:
{% for i in items %}
<ul class="orders" data-prototype="{{ form_widget(form.orders.vars.prototype)|e }}">
{{ i.name }} and here should be a field from the form, for example tag.name
</ul>
{% endfor %}
我建议应该将食谱中给出的js更改为这样做,但是我的js不好,我的尝试没有完成这项工作。
我试着把它放在循环中:
<script>
addTagForm(collectionHolder);
</script>
这在 .js 文件中:
var collectionHolder = $('ul.orders');
jQuery(document).ready(function() {
collectionHolder.data('index', collectionHolder.find(':input').length);
function addTagForm(collectionHolder) {
var prototype = collectionHolder.data('prototype');
var index = collectionHolder.data('index');
var newForm = prototype.replace(/__name__/g, index);
collectionHolder.data('index', index + 1);
var $newFormLi = $('<li></li>').append(newForm);
}
});