2012-03-25 44 views
2

兩個月前,我問,如何實現URI這裏與語言參數的路由:Locale in Routing, Default Language also without Parameter區域設置路由,不帶參數的默認語言

但現在,爲了避免重複的內容,我想有默認語言( en)不帶參數和其他語言。換句話說,我需要根據_locale參數定義路由前綴。

http://example.com/ 
http://example.com/de/ 
http://example.com/about/ 
http://example.com/de/about/ 
... 

這裏是我的測試設置,這給了我下面的錯誤顯示:

的routing.yml:

_site_en: 
    resource: "@MyMainBundle/Controller/SiteController.php" 
    type:  annotation 
    requirements: { _locale : en } 
    prefix:/

_site: 
    resource: "@MyMainBundle/Controller/SiteController.php" 
    type:  annotation 
    requirements: { _locale : fr|es|it|de } 
    prefix: /{_locale}/ 

控制器批註

/** 
    * @Route("/", name="_site_startpage", defaults={"_locale" = "", "slug"="startpage"}) 
    * @Route("/{slug}/", name="_site_site", defaults={"_locale"=""}) 
    * 
    * @ParamConverter("page", class="MyMainBundle:Page") 
    */ 
public function siteAction($slug, $_locale, Page $page) 

如何以正確的方式做到這一點?

編輯: 作爲一個結果我得到一個例外,路徑的路徑沒有定義。

No route found for "GET /" 
404 Not Found - NotFoundHttpException 
1 linked Exception: 
ResourceNotFoundException » 

路由器:調試只顯示第2路線:

_site_startpage     ANY  /{_locale}/ 
_site_site      ANY  /{_locale}/{slug}/ 

編輯2: 我結束了使用JMSI18nRoutingBundle ...

+0

「沒有工作」含糊不清。我認爲你的parameters.ini中已經定義了一個默認語言環境,不是嗎?所以也許你應該嘗試沒有默認和要求部分。 – greg0ire 2012-03-25 14:30:47

+0

對不起,你是對的,我更新了這個問題。 – madc 2012-03-25 18:03:06

+0

也許您的默認語言環境不是en不滿足要求。嘗試刪除它們以查看它仍然會得到一個404.還要運行路由器:調試任務,以查看是否考慮了您的路由。 – greg0ire 2012-03-25 18:22:57

回答

2

在你的routing.yml爲先,鍵入「註釋「指定您的控制器必須爲路由內省。我認爲一切都被忽略了。您應該嘗試刪除該類型或將其更改爲yml,刪除資源條目並指定_controller參數的值...我認爲您應該查看yml路由定義的實際格式。

或者也可以使用註釋來定義此默認路由。