KNP Doctrinebehaviors捆绑:如何显示可翻译的实体?

时间:2015-08-05 06:36:39

标签: symfony

我使用KNP Doctrinebehaviors Bundle来翻译我的实体,并使用a2lix_translations来获取i18n形式,

我对这些步骤没有任何问题:

  • 使用多语言添加实体。
  • 在案例中获取实体是我的默认语言环境语言。
  • 更新实体。
  • 删除实体。

但问题是如何在树枝上访问我的Page Entity的主题?

这是一些了解问题的照片:

这是我的PageEntity



public function findAllByLocale($locale){

        return $this->createQueryBuilder('a')
                   ->join('a.translations', 'aTrans')
                   ->where('aTrans.locale = :locale')
                   ->setParameter("locale", $locale)
                   ->addSelect('aTrans')
                   ->getQuery()
                   ->getResult()
        ;        
    }

use ORMBehaviors\Translatable\Translation;
    

    /**
     * @var string $title
     *
     * @ORM\Column(name="title", type="string", length=255)
     */
    private $title;

    /**
     * @var string $content
     *
     * @ORM\Column(name="content", type="text")
     */
    private $content;

    /**
     * @ORM\ManyToOne(targetEntity="Page", inversedBy="trans", cascade={"persist", "remove"})
     * @var Collection
     */
    private $object;
    /**
     * Get title
     *
     * @return string 
     */
    public function getTitle()
    {
        if( $title == $this->translate()->getTitle() ) {
        return $title;
    }
    return '';
    }
    /**
     * Set title
     *
     * @param string $title
     * @return Page
     */
    public function setTitle($title)
    {
        $this->title = $title;

        return $this;
    }   

    /**
     * Set content
     *
     * @param string $content
     * @return Page
     */
    public function setContent($content)
    {
        $this->content = $content;

        return $this;
    }

    /**
     * Get content
     *
     * @return string 
     */
    public function getContent()
    {
        return $this->content;
    }
    /**
     * @param $method
     * @param $args
     *
     * @return mixed
     */
    public function __call($method, $args)
    {
        if (!method_exists(self::getTranslationEntityClass(), $method)) {
            $method = 'get' . ucfirst($method);
        }

        return $this->proxyCurrentLocaleTranslation($method, $args);
    }

and this is my query : 

<!-- begin snippet: js hide: true -->
&#13;
&#13;
&#13;

FormType twig page : index.html.twig

谢谢

1 个答案:

答案 0 :(得分:0)

以下是我理解的答案:

<强> FIRST:
如果要根据猜测的区域设置显示实体的已翻译字段,请从doc

  

代理翻译
  额外的功能允许您代理可翻译实体的翻译字段。   您可以在可翻译实体的magic __call方法中使用它,这样当您尝试调用getName(例如)时,它将返回当前语言环境的名称的已翻译值:

public function __call($method, $arguments)
{
    return $this->proxyCurrentLocaleTranslation($method, $arguments);
}

现在,当您在树枝模板中显示具有已翻译字段name的实体时,您可以使用:

{{ entity.getName() }}

代理将拦截您的呼叫并通过猜测请求中的区域设置来返回相应的内容。这就是你想要显示大多数实体的方式。

<强> SECOND:
另一种方式,如果您特别想要翻译法语实体,那么您也可以在树枝中使用以下内容:

{{ entity.translate('fr').getName() }}