5

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

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

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

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

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

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

4

1 回答 1

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();

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

于 2013-02-04T18:21:54.753 回答