我在Symfony2中有3个嵌套表单。我不会在这里进入所有代码,因为它可能很长。我要举例说明我想在这里做些什么。
所以,让我们说Category
有一个Product
而产品有一个Tag
。
其中每一个都是可重复使用的AbstractType
。
这将是 CategoryType 的代码(我将省略allow_add
,allow_delete
和by_reference
以提高可读性。
$builder->add('product', 'collection', array(
'type' => new ProductType(),
'prototype' => true,
'prototype_name' => '__product__'
));
这将是 ProductType
$builder->add('tag', 'collection', array(
'type' => TagType(),
'prototype' => true,
'prototype_name' => '__tag_name__'
));
TagType 在这里并不重要。我想要的是在Twig中以两个divs
像这样渲染这些集合的原型......
<div class="ResourceAttributePrototype" data-product-prototype="{{ form_widget(form.product.vars.prototype)|e }}"></div>
<div class="Prototype" data-tag-prototype="{{ form_widget(form.product.vars.prototype.children['tag'].vars.prototype)|e }}"></div>
问题是第一个原型是数据属性中的渲染,但第二个是空字符串。为什么呢?
此外,如果有人对如何渲染嵌套表单集合有更好的了解,我会全神贯注。我找到了我跟随的a good example,但它不起作用。
答案 0 :(得分:2)
如果您只是首先渲染孩子,这个问题就会消失。
我的一个项目示例:
首先渲染这些原型:
campaignForm.campaignRows.vars.prototype.children [&#39; campaignTexts&#39]。vars.prototype campaignForm.campaignRows.vars.prototype.children [&#39; featuredItems&#39]。vars.prototype campaignForm.campaignRows.vars.prototype.children [&#39; campaignImageCampaigns&#39]。vars.prototype
然后父母:
campaignForm.campaignRows.vars.prototype
适合我,希望它也适合你。我假设孩子们被设置为内部渲染,导致你遇到的问题。
答案 1 :(得分:0)
好的,我想通了。
这是我坚持的一个项目。它有自己的形式主题,并且主题化使嵌套的表单集合在另一个内部呈现。
因此,如果有人看到这个,请检查您的表单主题,如果您自定义。
上面的答案都有效。