kub*_*lav 5 routing internationalization symfony
我正在使用JMS\I18nRoutingBundle
,Gedmo\Translatable
而且Gedmo\Sluggable
.具有默认位置的路由也可以工作,但其他语言环境无需翻译slug.我的i18n路由具有以下设置:
# Doctrine extensions
stof_doctrine_extensions:
default_locale: %locale%
translation_fallback: true
orm:
default:
#…
sluggable: true
translatable: true
loggable: false
#…
jms_i18n_routing:
default_locale: cs_CZ
locales: [cs_CZ, en_US]
strategy: custom
hosts:
cs_CZ: example.cz
en_US: example.com
redirect_to_host: true
Run Code Online (Sandbox Code Playgroud)
当我设置这样的路线时:
hw_category:
pattern: /category/{slug}
defaults: { _controller: AcmeSiteBundle:Category:detail }
Run Code Online (Sandbox Code Playgroud)
/**
* @Template
*/
public function detailAction(Category $category)
{}
Run Code Online (Sandbox Code Playgroud)
这条路线有效
example.cz/category/slug-in-czech
example.com/category/slug-in-czech
但是我希望获得example.com/category/slug-in-english
引发404异常的工作object not found
.
在您的控制器中,您必须覆盖实体存储库中使用的方法:
/**
* @Template
* @ParamConverter(
* "category",
* class = "AcmeSiteBundle:Category",
* options = {
* "repository_method" = "findByTranslatedSlug"
* }
* )
*/
public function detailAction(Category $category)
{}
Run Code Online (Sandbox Code Playgroud)
namespace Acme\Bundle\SiteBundle\Entity;
use Doctrine\ORM\EntityRepository;
class CategoryRepository extends EntityRepository
{
public function findByTranslatedSlug($slug)
{
$qb = $this->createQueryBuilder('c')
->where('c.slug = :slug')
->setParameters($slug);
$query = $qb->getQuery();
// set the translation query hint
$query->setHint(
\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
);
return $query->getOneOrNullResult();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2505 次 |
最近记录: |