在我的Symfony项目中,我使用 SonataAdminBundle 和 A2lixTranslationForm + KnpLabsDoctrineBehaviors 包进行多语言支持。
我有序列和剧集实体,它们使用标准 OneToMany 和 ManyToOne 关系。我使用 sonata_type_collection :
显示剧集->add('episodes', 'sonata_type_collection', [
'by_reference' => false,
],
[
'edit' => 'inline',
'inline' => 'table',
]
)
默认情况下,A2lixTranslation包会在彼此之下显示可翻译字段。但是,我需要在其自己的列中显示剧集的每个翻译字段。为了实现这一点,我创建了三个具有相同 property_path 的虚拟字段:
->add('episode_title', 'a2lix_translations', [
'property_path' => 'translations',
'fields' => [
'title' => [
'attr' => [
'pattern' => false,
],
'label' => false,
],
],
'exclude_fields' => ['subTitle', 'description'],
'label' => 'Title',
])
->add('episode_subtitle', 'a2lix_translations', [
'property_path' => 'translations',
'fields' => [
'subTitle' => [
'label' => false,
],
],
'exclude_fields' => ['title', 'description'],
'label' => 'Subtitle',
'required' => false,
])
->add('episode_description', 'a2lix_translations', [
'property_path' => 'translations',
'fields' => [
'description' => [
'field_type' => 'textarea',
'label' => false,
],
],
'exclude_fields' => ['title', 'subTitle'],
'label' => 'Description',
'required' => false,
])
如您所见,我在每个 a2lix_translations 表单中只显示一个字段。
但是我面临以下问题:当我使用收集表单的添加新按钮添加新剧集时,仅保存最后一个字段值(在这种情况下为描述)然后单击父级(串行)表单的更新按钮。如果已编辑,则已正确保存已存在的剧集。
请您指出我为什么会这样,以及如何解决问题。我想每个翻译形式的值都会重写以前的值,但为什么在保存现有记录时这会正常工作呢? 或者也许还有另一种方法可以在奏鸣曲集合表单中显示自己列中的每个字段,这也会有所帮助。
谢谢。