让我们考虑一下这个例子:我有一个表单类型,我在“集合时尚”中嵌入了另一种类型,如下所示
->add('foo', CollectionType::class, [
'entry_type' => new FooType(),
'error_bubbling' => false,
'allow_add' => true,
'allow_delete' => true,
'required' => false,
'label' => ' ',
'entry_options' => [
'bar' => $options['bar'],
],
'by_reference' => false,
])
并且一切正常(我可以轻松添加和删除元素)。
由于我正在将框架从2.8升级到3.0,我已阅读更新日志并注意到
已删除CollectionType的选项类型以支持 entry_type选项。 entry_type选项的值必须是 完全限定的班级名称(FQCN)。
所以我把表格改为
->add('foo', CollectionType::class, [
'entry_type' => FooType::class,
'error_bubbling' => false,
'allow_add' => true,
'allow_delete' => true,
'required' => false,
'label' => ' ',
'entry_options' => [
'bar' => $options['bar'],
],
'by_reference' => false,
])
但是当我向集合添加元素时,似乎ModelData
被折叠到同一个元素(集合的最后一个元素)中。
所以,假设我发布了带有[1,2,3]
的实体,ViewData
是正确的,而ModelData
有一个带有三个元素的数组集合:三个foo(s)的id为3,所以同样的foo。
有谁知道这里发生了什么?
这是FooType
有意义的代码
$resolver->setDefaults([
'data_class' => 'Vendor\Bundle\Entity\Foo',
'empty_data' => new Foo(),
]);
答案 0 :(得分:0)
这似乎是一个symfony错误(未经证实; read more)或在嵌入表单的entry_type
上new
和empty_data
中误导了FQCN的组合。< / p>
如果SF核心团队在问题中回复我,我会及时更新我的答案。