38

コレクション型を別のコレクション型に含めたい。次のようになります。ここに画像の説明を入力

コレクションを 1 つだけ使用しても問題ありませんが、外側のフォームのプロトタイプを編集する必要があるため、行ごとに内側のフォームのプロトタイプをレンダリングします。

どうすればそれを行うことができますか?また、どのように保存するのが最善でしょうか

編集:今、ネストされたフォームのプロトタイプをレンダリングしようとしています:

  <ul class="characteristics-container" data-prototype="{{ form_widget(form.characteristics.vars.prototype)|e }}" data-prototype-options="{{ form_widget(form.characteristics.options.vars.prototype|e ) }}">
                    {# iterate over each existing tag and render its only field: name #}
                    {% for characteristic in form.characteristics %}
                        <li>{{ form_row(characteristic.name) }}</li>

                        <div class="characteristics-options">
                            {% for opt in form.characteristics.options %}

                            {% endfor %}                     
                        </div>


                    {% endfor %}
                </ul>

エラーが発生しますform_widget(form.characteristics.options.vars.prototype|e

Method "options" for object "Symfony\Component\Form\FormView" does not exist in 

特性[0]を試しましたが、キーが存在しないと表示されます

ここに私のフォームクラスがあります:

PromotionType (基本フォーム)

$builder              
            ->add('characteristics','collection', array(
                'label'         => 'Caracteristicas',
                 'type'         => new PromotionCharacteristicType(),
                 'allow_add'    => true,
                 'allow_delete' => true,
                 'by_reference' => false
            ))

プロモーション特性タイプ

 $builder
            ->add('name',NULL, array('label'  => 'Nome'))
            ->add('options', 'collection', array(
                'type' => new PromotionCharacteristicOptionType(),
                'allow_add' => true,
                'allow_delete' => true,      
                'prototype' => true,
                'by_reference' => false,
            ))                       
        ;

PromotionCharacteristicOptionType

 $builder
            ->add('name',NULL, array('label'  => 'Nome')) 
        ;

最初のレベルのプロトタイプは正常に動作します。

4

2 に答える 2

1

Alexey B.の答えに加えprototype.children['opts']て、コレクションのプロトタイプにアクセスできるようにするために、通常は使用する必要はないようです。私は次のように使用prototype.<collection_name>します:

<div
    id="prots"
    data-prototype-opt="{{ form_widget(form.chars.vars.prototype.opts.vars.prototype) | e }}"
    data-prototype-char="{{ form_widget(form.chars.vars.prototype) | e }}"
>
</div>
于 2015-09-10T22:53:56.597 に答える