如何使用knp labs可翻译的学说行为访问翻译的属性

时间:2015-03-24 12:38:17

标签: symfony doctrine

我正在使用可翻译的学说,并且我有一个具有可翻译属性的实体。这看起来像这样。

class Scaleitem
{
    /**
     * Must be defined for translating this entity
     */
    use ORMBehaviors\Translatable\Translatable;

    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
}

我有一个文件ScaleitemTranslation:

class ScaleitemTranslation
{
    use ORMBehaviors\Translatable\Translation;

    /**
     * @ORM\Column(type="string", length=255)
     */
    protected $text;


    /**
     * Set text
     *
     * @param string $text
     * @return ScaleitemTranslation
     */
    public function setText($text)
    {
        $this->text = $text;

        return $this;
    }

    /**
     * Get text
     *
     * @return string 
     */
    public function getText()
    {
        return $this->text;
    }
}

我想从控制器访问文本:

$item = $em->getRepository('AppMyBundle:Scaleitem')->find(1);
dump($item->getText());

这不起作用。有人暗示我的问题吗?

1 个答案:

答案 0 :(得分:3)

translatable docs所示,您可以使用以下方式访问翻译:

  • $item->translate('en')->getName();当您需要特定语言时
  • 或在__call实体中添加Scaleitem方法(不在翻译实体上):

    /**
     * @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);
    }
    

    然后使用$item->getName();并始终检索当前区域设置中的任何“属性”。