2

翻訳可能な動作のカテゴリのリストを表示しようとしています。私のデフォルトのロケールは「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;
    }

}
4

1 に答える 1

1

解決策を見つけましたが、StofDoctrineExtensionsBundleが正しく機能していないことを意味します。

LocaleListenerを明示的に追加するには、config.ymlファイルを編集する必要がありました。

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 に答える