繁体   English   中英

如何在Sonata Admin中使用可翻译字段?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM