我已安装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进行过滤,我想检索一个国家实体。
我在这里或文档中没有找到任何关于如何做到这一点的内容。
感谢您提供有关如何解决问题的任何提示!
答案 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)。