将主题应用于表单字段很容易,例如:
{% form_theme form _self %}
{% block _product_name_widget %}
{{ block('field_widget') }}
{% endblock %}
但是如果表单字段是集合类型怎么办?例如:product['models'][1][comment
,
我不知道如何定制它。 (这可能是第一个问题)
更新:在这里:Symfony2: collection form field type with data-prototype
答案 0 :(得分: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 %}
诀窍在于“条目”,其中twig将帮助您将上述更改应用于每一行以及您指定的每个字段
希望有所帮助!
答案 1 :(得分:1)
您可以使用override 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
答案 2 :(得分:0)
您也可以通过像这样引用小部件来覆盖单个字段的collection_widget
主题。
例如,如果&#34;类别&#34;是一个&#34;集合&#34;在ProductType
表单上的小部件,您可以执行此操作。
{% block _product_categories_widget %}
{% for child in form %}
{{- form_row(child) -}}
<hr>
{% endfor %}
{% endblock %}