4

フォームフィールドにテーマを適用するだけで簡単です:

{% form_theme form _self %}

{% block _product_name_widget %}
    {{ block('field_widget') }}
{% endblock %}

しかし、フォーム フィールドがコレクション タイプの場合はどうでしょうか。例: product['models'][1][comment、カスタマイズする方法がわかりません。(これはここでの最初の種類の質問かもしれません)

更新:ここに anwser: Symfony2: data-prototype を使用したコレクション フォーム フィールド タイプ

4

3 に答える 3

5

Symfony 2.1(2.0でも機能するかもしれませんが、確かではありません)の時点で、コレクションにテーマを適用するには、次のようにします。

製品のコレクションがあるとしましょう(複数の製品エンティティがあります)

コントローラ:

    $repository = $this->getDoctrine()->getRepository('ExampleBundle:Product');
    $products = $repository->findAll();

    $productCollection = new Products;

    foreach ($products as $product) {
        $productCollection->getProducts()->add($product);
    }

    $collection = $this->createForm(new ProductsType, $productCollection);

    return $this->render('ExampleBundle:Default:index.html.twig', array(
        'collection' => $collection->createView()
            ));        

テーマは次のようになります。

{% block _productsType_products_entry_name_row %}
    <div class="yourDivName">{{ block('form_widget') }}</div>
{% endblock %}
{% block _productsType_products_entry_description_row %}
    <div class="yourDivDescription">{{ block('form_widget') }}</div>
{% endblock %}

秘訣は「エントリ」を使用することです。小枝は、上記の変更を各行および指定した各フィールドに適用するための役割を果たします。

お役に立てば幸いです。

于 2012-09-12T11:03:41.980 に答える
1

オーバーライド collection_widget ブロックで行うことができます。

{% block collection_widget %}
{% spaceless %}
    {% if prototype is defined %}
        {% set attr = attr|merge({'data-prototype': form_row(prototype) }) %}
    {% endif %}
    {{ block('form_widget') }}
{% endspaceless %}
{% endblock collection_widget %}

フォーム コレクション タイプをカスタマイズする方法が必要な場合は、この製品バンドルを参照してください。

于 2012-07-16T07:01:56.870 に答える
0

collection_widgetこのようにウィジェットを参照することで、単一のフィールドのテーマをオーバーライドすることもできます。

たとえば、「カテゴリ」がProductTypeフォーム上の「コレクション」ウィジェットである場合、これを行うことができます。

{% block _product_categories_widget %}
    {% for child in form %}
        {{- form_row(child) -}}
        <hr>
    {% endfor %}
{% endblock %}
于 2015-06-19T05:44:40.787 に答える