我正在尝试显示具有可翻译行为的类别列表。我的默认语言环境是“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;
}
}