【问题标题】:How to combine Translatable and Sluggable from DoctrineExtensions?如何结合 DoctrineExtensions 中的 Translatable 和 Sluggable?
【发布时间】:2013-02-01 17:26:04
【问题描述】:

我已安装 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 过滤,我想检索一个国家实体。

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

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

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    刚刚找到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 方法调用为您的 gedmo.listener.translatable 服务配置它(在教义扩展.yml)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      相关资源
      最近更新 更多