4

私はそのようにレンダリングされたコレクション型フィールドを持つフォームを持っています:

<div id="beneficiosTab" class="opcional">
    Beneficios
    <ul class="beneficios" data-prototype="{{ form_widget(formAtendimento.beneficios.get('prototype')) | e }}">
        {% for beneficio in formAtendimento.beneficios %}
            <li>{{ form_row(beneficio.coTipoBeneficio) }}</li>
            <li>{{ form_row(beneficio.vrValor) }}</li>
            <li>{{ form_row(beneficio.boConcedido) }}</li>
        {% endfor %}
        <li><a href="#" id="addBeneficio">Add Beneficio</a></li>
    </ul>
</div>
<div style="clear:both"></div>
{{ form_rest(formAtendimento) }}

フォームのエンティティは、コレクションの複数のアイテムを持つことも、何も持たないこともあります。

エンティティにコレクションのアイテムがある場合は正常に動作しますが、何もない場合、小枝の「for」は発生せず、form_rest に「Beneficios」div が生成されます。

それを防ぐ方法はありますか?前もって感謝します。

4

2 に答える 2

7

これは、フォーム レンダリングのバグのようです。コレクション要素をレンダリングした直後に次のコードを追加することで、 form_rest 関数で追加のフォーム レンダリングを無効にすることができました。

{% do form.uploads.setRendered() %}

「アップロード」は私のコレクションフィールドタイプです。ただし、これは私にとってベストプラクティスのようには思えません。

したがって、レンダリング全体は次のようになります。

 <div id="uploads" data-prototype="{{ form_widget(form.uploads.vars.prototype)|e }}">
        {% for upload in form.uploads %}
            {{ form_widget(upload) }}
        {% endfor %}
  </div>
  {% do form.uploads.setRendered() %}
于 2012-09-30T20:56:59.073 に答える
0

form_restは、レンダリングされていないすべてのフォームを生成します。すべての入力はSymnfony2のフォームであり、同じことがコレクションタイプにも当てはまります。

コレクションを印刷したことがないので、Symfonyがあなたに代わって作成します。非表示にし、form_restを使用する場合は、次のように出力します。

<div style="display: none" />
于 2012-06-05T12:25:13.847 に答える