ここで説明したのと同じことをしています: 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);
}
});