翻訳可能な動作のカテゴリのリストを表示しようとしています。私のデフォルトのロケールは「fr」です。
'ext_translations'テーブルには、ロケール'en'に必要なすべてのレコードがあります。
私のコントローラー:
....
$this->get('session')->setLocale('en');
$categories = $this->getDoctrine()->getRepository('MyBundle:Category')->findAll();
....
問題は、取得したすべてのカテゴリを表示すると、「en」ではなく「fr」の翻訳が表示されることです。
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;
}
}