如何结合DoctrineExtensions中的Translatable和Sluggable?

ste*_*fax 5 symfony doctrine-orm

我已经安装了https://github.com/stof/StofDoctrineExtensionsBundle,并在Country实体的特定字段上使用Translatable和Sluggable:

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

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

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

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

感谢有关如何解决这个问题的任何提示!

ste*_*fax 3

刚刚在这篇博客文章中找到了解决方案。解决方案是使用 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();
Run Code Online (Sandbox Code Playgroud)

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