在我的 Symfony 项目中,我使用SonataAdminBundle和A2lixTranslationForm + KnpLabsDoctrineBehaviors包来支持多语言。
我有使用标准OneToMany和ManyToOne关系的Serial和Episode实体。我使用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表单中只显示一个字段。
但是我遇到了以下问题:当我使用集合表单的添加新按钮添加新剧集,然后单击父(序列)表单的更新按钮时,只保存最后一个字段值(在这种情况下为描述)。如果已编辑,其中已存在的剧集将被正确保存。
你能否指出我为什么会发生这种情况以及如何解决这个问题。我想每个翻译形式的值都会重写以前的值,但是为什么在保存现有记录时这会正常工作?或者也许还有另一种方法可以在奏鸣曲合集形式的自己的列中显示每个字段,这也会有所帮助。
谢谢你。