我有一个实体产品,我正在添加traductions(ProductDescription的集合)。
这是我的ProductDescriptionType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('description', 'textarea')
->add('metaDescription', 'textarea')
->add('metaKeyword', 'textarea')
->add('tag')
->add('languageId', 'hidden')
;
}
我的ProductType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('upc')
->add('model')
->add('sku')
->add('quantity')
->add('price')
->add('status', 'choice',
array(
'choices' => Product::getStatusArray(),
'required' => true,
)
)
;
//ProductDescription
$builder->add('traductions', 'collection',
array(
'type' => new ProductDescriptionType(),
'allow_add' => true,
'prototype' => true,
'label' => false,
'by_reference' => false
)
);
}
在我看来new.html.twig,我正在做:
{% for language in languages %}
<div role="tabpanel" class="tab-pane" id="product-traduction-{{ language.languageId }}">
{{ form_row(create_form.traductions.vars.prototype.languageId, {'value' : language.languageId }) }}
{{ form_row(create_form.traductions.vars.prototype.name) }}
{{ form_row(create_form.traductions.vars.prototype.description) }}
{{ form_row(create_form.traductions.vars.prototype.metaDescription) }}
{{ form_row(create_form.traductions.vars.prototype.metaKeyword) }}
{{ form_row(create_form.traductions.vars.prototype.tag) }}
</div>
{% endfor %}
我没有循环遍历create_form.traductions,因为它是空的(创建产品),我希望ProductDescription的字段已经显示所有可用的语言。
问题是form_row只渲染字段一次。
我看到这部分是在CookBook http://symfony.com/doc/current/cookbook/form/form_collections.html上解释的,但它是用JQuery完成的,我必须对原型输入做很多修改才能达到我想要的效果(替换 name ,将languageId放在隐藏的输入中等。)
有人能帮助我吗?
感谢您的时间。