是否可以在Sonata管理包中添加可翻译的关联?


Is it possible to add a translatable association in Sonata Admin Bundle?

是否可以在Sonata管理中添加一个可翻译的关联,使用DoctrineBehaviors可翻译的功能?

我的意思是,像这样的东西:

// InfoPageAdmin.php
->add('translations', 'a2lix_translations', [
    'fields' => [
        'title' => [
            'field_type' => 'text'
        ],
        'content' => [
            'field_type' => 'ckeditor',
            'config_name' => 'default'
        ],
        'slideshow' => [
            'field_type' => 'sonata_type_model_list'
        ]
    ]
])

其中'slideshow'是可翻译字段,与其他实体相关联:

// InfoPageTranslation.php
/**
 * @ORM'ManyToOne(targetEntity="AppBundle'Entity'PictureCollection", cascade={"persist"}, fetch="EAGER")
 * @ORM'JoinColumn(name="slideshow_id", referencedColumnName="id")
 */
protected $slideshow;

我得到了以下错误:

contextroreexception: Catchable致命错误:参数1传递给奏鸣曲' AdminBundle ' ' DataTransformer ' ModelToIdTransformer形式::__construct ()必须实现接口奏鸣曲'AdminBundle'Model'ModelManagerInterface, null给定,调用D:'XAMPP'htdocs'mega'app'cache'dev'classes.php定义在D:'XAMPP'htdocs'mega'app'cache'dev'classes.php line 12628

我希望我的问题很清楚。

谢谢!

嗯,我找到了解决这个问题的简单方法。例如,我希望有一个不同的画廊为每一个不同的语言的infpage。所以,我可以这样做:

# InfoPageAdmin.php
->add('translations', 'a2lix_translations', [
    'fields' => [
        'gallery' => [
            'field_type' => 'entity',
            'class' => 'AppBundle:Gallery',
        ],
    ],
])

这里,Gallery是infpage实体的字段:

# AppBundle/Entity/InfoPage.php
/**
 * @ORM'ManyToOne(targetEntity="AppBundle'Entity'Gallery", cascade={"persist"}, fetch="EAGER")
 * @ORM'JoinColumn(name="gallery_id", referencedColumnName="id")
 */
protected $gallery;

我希望我的回答能帮助到别人。:)

编辑:如果您想在翻译中使用'sonata_type_model_list',这里描述了工作解决方案:https://github.com/a2lix/TranslationFormBundle/issues/155.