2016-02-01 105 views
1

我使用“Knp Doctrine2 Behaviors”进行实体翻译,“A2LiX Translation Form”使用Sonata Admin表单翻译实体。一切工作正常。但我不知道我应该在Admin类的“configureDatagridFilters”和“configureListFields”方法中放置什么?当然,例如,$ datagridMapper-> add('title');不起作用,因为它是我的“Post”实体的可翻译字段,它位于PostTranslation类中,但Admin类是Post实体。 Post实体中的__call方法没有帮助,它似乎在管理类中不起作用。如何在Sonata Admin中使用可翻译字段?

$ datagridMapper-> add('translations.title');不会导致错误,有一行实体,但<a> </a>标签之间没有任何东西:

enter image description here

以防万一,这里是我的帖子,翻译后和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'); 
    } 

} 

回答

0

您需要将此代码添加到您的实体(没有翻译的):

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

相关问题