![](/img/trans.png)
[英]How to print translatable data in sonata admin with DoctrineBehaviors from kpnlabs
[英]How to use translatable fields in Sonata Admin?
我使用“ Knp Doctrine2 Behaviors”进行实体翻译,并使用“ A2LiX Translation Form”来翻译Sonata Admin表单中的实体。 一切正常。 但是我不知道应该在Admin类的“ configureDatagridFilters”和“ configureListFields”方法中放什么?
自然地,例如,$ datagridMapper-> add('title'); 无法使用,因为它是我的“ Post”实体的可翻译字段,并且位于PostTranslation类中,但是Admin类适用于Post实体。 Post实体中的__call方法没有帮助,似乎在admin类中不起作用。
$ datagridMapper->加( 'translations.title'); 不会导致错误,并且实体行不存在,但<a> </a>
标记之间没有任何内容:
以防万一,这是我的Post,PostTranslation和PostAdmin类:
/**
* Blog post
*
* @ORM\Table(name="post")
* @ORM\Entity(repositoryClass="AppBundle\Repository\PostRepository")
*/
class Post
{
use ORMBehaviors\Translatable\Translatable;
public function __call($method, $arguments)
{
return $this->proxyCurrentLocaleTranslation($method, $arguments);
}
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="posts", fetch="EAGER")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
private $category;
public function __construct() {}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
public function setCategory(Category $category)
{
$category->addPost($this);
$this->category = $category;
}
public function getCategory()
{
return $this->category;
}
}
/**
* Post Translation
*
* @ORM\Entity
*/
class PostTranslation
{
use ORMBehaviors\Translatable\Translation;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
/**
* @var string
*
* @ORM\Column(name="content", type="string", length=255)
*/
private $content;
public function __construct() {}
/**
* Set title
*
* @param string $title
*
* @return post
*/
public function setTitle($title)
{
$this->title = $title;
return $this;
}
/**
* Get title
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
public function setContent($content)
{
$this->content = $content;
}
public function getContent()
{
return $this->content;
}
}
/**
* Class PostAdmin
*/
class PostAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('translations', 'a2lix_translations')
->add('category', 'entity', [
'class' => 'AppBundle\Entity\Category',
'property' => 'name'
])
;
}
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper->add('translations.title');
}
protected function configureListFields(ListMapper $listMapper)
{
$listMapper->addIdentifier('translations.title');
}
}
您需要将此代码添加到您的实体(而不是翻译的实体):
public function __call($method, $arguments)
{
return \Symfony\Component\PropertyAccess\PropertyAccess::createPropertyAccessor()->getValue($this->translate(), $method);
}
然后可以在configureListFields上放置'title'
或'translate.title'
。
在这里有更多信息https://github.com/KnpLabs/DoctrineBehaviors#proxy-translations
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.