【问题标题】:symfony2: Applying theme to individual field for collection typesymfony2:将主题应用于集合类型的单个字段
【发布时间】:2012-07-14 22:58:12
【问题描述】:

将主题应用于表单字段很容易,例如:

{% form_theme form _self %}

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

但是如果表单域是集合类型呢?例如:product['models'][1][comment, 我不知道如何自定义它。 (这可能是这里的第一类问题)

更新:此处回复:Symfony2: collection form field type with data-prototype

【问题讨论】:

标签: symfony symfony-forms


【解决方案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 %}

如果您想如何自定义表单集合类型,请尝试查看此Product Bundle

【讨论】:

  • sry,我在这个捆绑包中没有找到任何线索,也许我错过了什么?无论如何,我在 UPDATE 中找到了上面提到的答案
【解决方案2】:

从 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 %}

诀窍是使用“条目”,twig 将为您完成工作,将上述更改应用于您指定的每一行和每个字段

希望有帮助!

【讨论】:

  • 这就像魔法一样,但我什至在官方文档中都找不到这个功能。谢谢。
【解决方案3】:

您也可以通过引用这样的小部件来覆盖单个字段的 collection_widget 主题。

例如,如果“类别”是ProductType 表单上的“集合”小部件,您可以这样做。

{% block _product_categories_widget %}
    {% for child in form %}
        {{- form_row(child) -}}
        <hr>
    {% endfor %}
{% endblock %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多