如何结合DoctrineExtensions中的Translatable和Sluggable?

时间:2013-02-01 17:26:05

标签: symfony doctrine-orm

我已安装https://github.com/stof/StofDoctrineExtensionsBundle并在国家/地区实体的特定字段上使用Translatable和Sluggable:

...
class Country
{
    ...
    /**
     * @Gedmo\Translatable
     * @Gedmo\Slug(fields={"name"})
     * @ORM\Column(length=255, nullable=false)
     */
    private $slug;

对于英语用户,页面的URL应为... / country / france;对于德语用户,页面的URL应为... / land / frankreich。

在控制器中,我得到了特定语言的slug,并通过这个特定于语言环境的slug进行过滤,我想检索一个国家实体。

我在这里或文档中没有找到任何关于如何做到这一点的内容。

感谢您提供有关如何解决问题的任何提示!

1 个答案:

答案 0 :(得分:3)

刚刚找到solution in this blog article。解决方案是使用TranslationWalker的ORM查询提示自动加入转换表,因此您可以按任何已翻译的字段排序或过滤。这很棒!

然后代码看起来像:

...
->createQuery('SELECT...FROM MyFooBundle:Country c WHERE c.slug = :slug...)
->setParameter('slug', $slug)
->setHint(
    \Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
    'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
)
->getSingleResult();

顺便说一句:如果你想使用回退(即如果没有特定的翻译可用,请采用默认的字符串/文本),然后通过setTranslationFallback方法调用(在doctrine_extensions中)为你的gedmo.listener.translatable服务配置它。 .yml)。