2

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

在我的“ext_translations”表中,我有语言环境“en”所需的所有记录。

我的控制器:

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

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

我试图从我的 Category 实体中显示 $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;
    }

}
4

1 回答 1

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 }

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

奥雷尔

于 2012-05-11T10:32:46.833 回答