1

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

});
4

1 に答える 1

0

メイン クラスに addTag($tag) メソッドがあると仮定すると、さまざまな「新しい」タグをそれに追加できます。

クラス内タスク

public function addTag($tag){
    $this->tags[]=$tag;

    return $this;
}

コントローラー内(ここでは 10 個のタグを想定)

$task=new Task();
for($i=0;i<10;i++){
   $task->addTag(new Tag());
}
$form->setData($task);

あなたの見解では

{% for tag in form.tags %}
 <ul class="orders">
    <li>{{ form_widget(tag.name) }}</li>
 </ul>
{% endfor %}

手動でクリックする必要がない場合は、JavaScript 部分を削除できます。

于 2013-08-12T15:46:16.347 に答える