【问题标题】:Symfony2 & Translatable : entity's locale is emptySymfony2 & Translatable:实体的语言环境为空
【发布时间】:2012-05-10 11:03:37
【问题描述】:

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

}

【问题讨论】:

  • 我刚刚在我的问题中添加了我的实体源代码(没有所有的 getter 和 setter)
  • 我查看了我的日志,似乎从未调用过 Stof\DoctrineExtensionsBundle\EventListener\LocaleListener...这正常吗?

标签: symfony doctrine-orm translation


【解决方案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 }

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

奥雷尔

【讨论】:

  • 你能解释一下如何使用它吗?我已经尝试将它添加到我的 config.yml 但我收到错误 InvalidArgumentException: There is no extension able to load the configuration for "my_translatable_locale_listener"
  • my_translatable_locale_listener 键应该在service 键下。
  • 我也有同样的问题,我添加了LocaleListener,但还是同样的问题,你能帮忙吗?
猜你喜欢
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
相关资源
最近更新 更多