【问题标题】:Sonata Admin display knp translatable translation in sonata_type_collectionSonata Admin 在 sonata_type_collection 中显示 knp 可翻译翻译
【发布时间】:2017-02-20 07:54:55
【问题描述】:
在奏鸣曲管理员中使用 knp 可翻译学说扩展。
当您的翻译实体包含一组也已翻译的实体时,是否可以让已翻译项目出现在 sonata_type_collection 中?
:例如CategoryEntity 与 ArticleEntity 具有 oneToMany 关联,两者都配置了转换表。在CategoryAdmin 中,定义了articles 类型为sonata_type_collection 的属性,但是没有出现任何值(翻译肯定可以正常工作)。
【问题讨论】:
标签:
symfony
sonata-admin
sonata
【解决方案1】:
我经历过这种情况并最终得到了这个解决方案,
只需在 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();
}
}
}