我正在尝试显示具有可翻译行为的类别列表。 我的默认语言环境是'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;
}
}
答案 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 }
如果有人有更好的解决方案......
斯坦