2
我用symfony 2.事情下面的問題是,我有在一開始就_locale參數例如幾個路由定義:Symfony的2問題與路由和_locale參數
/**
* @Route("/{_locale}")
* @Route("/{_locale}/community")
* @Route("/{_locale}/events")
*/
現在,_locale參數的默認值爲en-US,因此一旦站點區域設置爲en-US,它就不會顯示在url上。
我有另一條路線,這將改變應用程序的語言環境,
/**
* @Route("/change-locale/{locale}", name="change_locale")
*/
我需要以請求重定向到引用站點路由名稱設置爲區域設置參數,以獲得引薦路線名稱新的區域設置。我使用路由器服務match()方法來獲取引用者url的路由名稱。
現在例如。
如果引薦網址是/ EN-US /社區
然後使用匹配方法獲得傾倒路線:
'_locale' = 'en-US'
'_route' = 'app_frontend_main_default_index_1'
哪個是正確的,但如果語言環境是默認語言環境(如:ES-ES),則甩路線如下:
'_locale' = '/community'
'_route' = 'app_frontend_main_default_index'
哪項是錯誤的,因爲URL匹配到另一條路線,以及區域設置(這是默認值)獲得第一的價值部分路線。
我需要的是得到正確的路徑名,同時考慮在默認的語言環境參數。
在此先感謝。
工作順利,但您不認爲路由器服務的匹配方法應考慮到默認參數嗎? – asolenzal
至於我最好直接定義所有路線,不要有任何魔法。作爲一個選項,您可以使用[「sticky」](http://symfony.com/doc/currentbook/session/locale_sticky_session.html)語言環境偵聽器,它將語言環境(從語言首選項或geoip接收)添加到會話和一個主要控制器處理所有不帶'{_locale}'參數的路由並重定向到所需的語言環境。在這種情況下,不需要爲每個路由設置'/ {_ locale}'前綴,因爲您可以在'routing.yml'文件中定義一次前綴。 – chapay
是的,沒錯,但是會話較少的應用程序,我使用Symfony作爲休息後端。 – asolenzal