Symfony2&可翻译:实体的区域设置为空

时间:2012-05-10 11:03:38

标签: symfony doctrine-orm translation

我正在尝试显示具有可翻译行为的类别列表。 我的默认语言环境是'fr'。

在我的'ext_translations'表中,我拥有locale'en'所需的所有记录。

我的控制器:

    ....
    $this->get('session')->setLocale('en');
    $categories = $this->getDoctrine()->getRepository('MyBundle:Category')->findAll();
    ....

问题在于,当我显示所有检索到的类别时,我得到'fr'翻译而不是'en'。

我尝试在我的类别实体中显示$ locale变量,并且为空

我唯一的解决方案是在我的控制器中添加它:

    ....
    $em = $this->getDoctrine()->getEntityManager();
    foreach($categories as $cat){
        $cat->setTranslatableLocale($this->get('session')->getLocale());
        $em->refresh($cat);
    }
    ....

但当然,这不是一个好的解决方案。

有任何帮助吗? 为什么我的实体的$ locale变量为空?

感谢您的帮助,

此致

斯坦

修改

我的实体:

<?php

namespace Acme\MyBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Translatable\Translatable;

/**
 * Acme\MyBundle\Entity\Category
 *
 * @ORM\Table(name="category")
 * @ORM\Entity(repositoryClass="Acme\MyBundle\Repository\CategoryRepository")
 */
class Category implements Translatable
{

    /**
     * @var smallint $id
     *
     * @ORM\Column(name="id", type="smallint", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

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

    /**
     * @Gedmo\Locale
     * Used locale to override Translation listener`s locale
     * this is not a mapped field of entity metadata, just a simple property
     */
    private $locale;

    public function setTranslatableLocale($locale)
    {
        $this->locale = $locale;
    }

    public function getLocale(){
        return $this->locale;
    }

    /* ... all getters and setters ... */

    /**
     * Set title
     *
     * @param string $title
     */
    public function setTitle($title)
    {
        $this->title = $title;
    }

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

}

1 个答案:

答案 0 :(得分:1)

我找到了解决方案,但这意味着StofDoctrineExtensionsBundle无法正常工作。

我必须编辑我的config.yml文件以显式添加LocaleListener:

my_translatable_locale_listener:
    class: Stof\DoctrineExtensionsBundle\EventListener\LocaleListener
    arguments: [@stof_doctrine_extensions.listener.translatable]
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

如果有人有更好的解决方案......

斯坦