我有多語言站點的路由問題。這裏是routing.yml中(僅適用於一個包,但其他人都是一樣的)Symfony2路由多語言站點
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()
樹枝方法,使鏈接導航,上述路線的控制。它只爲英文版創建路徑。我認爲這是最後一個,所以當我爲德語添加一條路線時,它將生成該路線的路徑。由於路徑名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路由的目的無效。
有沒有人有任何想法如何處理這個問題?
是的,但文件指出,如果路線名稱相同,則第一個贏得勝利。那麼爲什麼這會成爲一個問題呢?另外,如果第一條路徑獲勝,爲什麼path()方法選擇最後一條創建鏈接。 –
'_locale'參數是特殊的。您可能無法像您的示例中那樣顯式設置它。這由內部通過'getLocale()'方法填充。我希望你的請求目前包含'en'作爲語言環境,因此'en'路由。 –
感謝您的回答。我將切換到您的實施 –