Sonata Admin在sonata_type_collection中显示knp可翻译的翻译

时间:2016-10-11 17:14:09

标签: symfony sonata-admin sonata

使用带有奏鸣曲管理员的knp可翻译学说扩展。

如果您的翻译实体包含也被翻译的实体集合,是否可以将翻译后的项目显示在sonata_type_collection中?

:例如CategoryEntityArticleEntity具有oneToMany关联,两者都配置了转换表。在CategoryAdmin中,定义了类型为articles的属性sonata_type_collection,但没有显示任何值(翻译肯定会起作用)。

1 个答案:

答案 0 :(得分:0)

我经历了这种情况,并最终得到了解决方案,
只需在prePersist()和preUpdate()上添加 mergeNewTranslations()
示例代码如下,

<?php

namespace Website\CategoryBundle\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Form\FormMapper;


class CategoryAdmin extends AbstractAdmin 
{

    /**
     * @inheritdoc
     */
    public function configureFormFields(FormMapper $formMapper)
    {

        ...

        $formMapper
        ->with('config.label_category', ['class' => 'col-md-12'])
            ->add('name', TextType::class, [
                    'label' => 'config.label_name'
                ]
            )
        ->end()

        ->with('config.label_article', ['class' => 'col-md-12'])
            ->add('articles', CollectionType::class,
                    [
                        'label' => false,
                        'required' => false,
                        'by_reference' => false,
                    ],
                    [
                        'edit' => 'inline',
                        'inline' => 'table',
                        'sortable' => 'position',
                    ]
                )
        ->end()
    }

    /**
     * @inheritdoc
     */
    public function prePersist($obj)
    {
        foreach ($obj->getArticles() as $article) {
            // $article->translate();
            $article->mergeNewTranslations(); 
        }
    }

    /**
     * @inheritdoc
     */
    public function preUpdate($obj)
    {
         foreach ($obj->getArticles() as $article) {
            // $article->translate();
            $article->mergeNewTranslations(); 
        }
    }

}