【发布时间】:2014-06-13 10:50:05
【问题描述】:
我有一个多语言网站的路由问题。这是routing.yml(仅适用于一个捆绑包,但其他捆绑包相同)
icoo_pitanja_route:
pattern: /{_locale}/najcesca-pitanja
defaults: { _controller: IcooPitanjaBundle:Pitanja:pitanja, _locale:hr }
requirements:
_locale: hr|en|de
icoo_pitanja_route:
pattern: /{_locale}/common-questions
defaults: { _controller: IcooPitanjaBundle:Pitanja:pitanja, _locale:en }
requirements:
_locale: hr|en|de
在我的页面顶部,我有 3 个链接可以将语言更改为克罗地亚语(默认)、英语和德语。制作链接以更改它们的代码是这样的......
{% set requestParams = app.request.attributes.get('_route_params') %}
{% set requestRoute = app.request.attributes.get('_route') %}
<div class='languages col-xs-4'>
<a href="{{ path(requestRoute, requestParams|merge({'_locale' : 'hr'})) }}" class='col-xs-3'><span class='real-link'>croatian</span><span></span></a>
<a href="{{ path(requestRoute, requestParams|merge({'_locale' : 'en'})) }}" class='col-xs-3'><span class='real-link'>english</span><span>|</span></a>
<a href="{{ path(requestRoute, requestParams|merge({'_locale' : 'de'})) }}" class='col-xs-3'><span class='real-link'>deutch</span><span>|</span></a>
</div>
真正的问题在于path() twig 方法,它为上述路线控制的导航创建链接。它仅为英文版创建路径。我想因为它是最后一个,所以当我为德语放置一条路线时,它会生成该路线的路径。由于路径名称是icoo_pitanja_route,并且它的英语和克罗地亚版本的路由名称相同,因此path() 的定义如下......
path('icoo_naslovna_route')
我想要的是,当我点击克罗地亚语时,网址是 www.example.com/hr/najcesca-pitanja,英文为 www.example.com/en/common-questions。但是paht() 方法选择了最后一种,即英文的。
现在,有几种方法可以解决这个问题。其中之一是为每种语言制定不同的路线。另一种是让它像这样......
pattern: (_locale}/{language-specific-link}
并在控制器中使用每种语言的有效链接数组对其进行处理,然后,如果 url 有效,则返回正确的响应。如果不是,则抛出未找到的异常,但我认为这会使 Symfony2 路由的目的无效。
有人对如何处理这个问题有任何想法吗?
【问题讨论】: