2013-06-12 37 views
5

在我的Symfony2應用程序,我想提出四頁的URL可能與一個路線:路由中的Symfony2:可選參數帶4周的網址爲一條路線

  1. 一個批次 - 的 - 其他 - 東東/報告/ - 20 (負數)
  2. 一批量-其他的- - 東西/報告/ 40 (正數)
  3. 一批量-的-另一東西/報告/ (沒有編號)
  4. a-lot-的 - 其他 - 東東/報告(無號,無/)

我的路線目前看起來是這樣的:

report: 
    pattern: /report/{days} 
    defaults: { _controller: "AppReportBundle:Report:dayReport", days = null } 

動作定義爲:

這目前使url 1和2工作,但在url 3和4的情況下,我得到一個錯誤

找不到路線

如何使參數「days」可選?
如果沒有提供參數,我怎樣才能讓/也被省略?

+0

這是很奇怪。因爲第四條路線應該工作。我經常使用可選參數,但我使用了註釋路徑定義。如果我在函數簽名中定義了默認值,我不應該在註釋中定義默認值。也許你需要省略其中一個默認聲明(例如在你的routing.yml中)或者嘗試使用numeric(或者string/bool)值而不是null。也許它會有所幫助。 –

+3

你的路線配置應該是:'defaults:{_controller:「AppReportBundle:Report:dayReport」,days:null}' – jkucharovic

回答

14

這裏有一個辦法做到這一點

的routing.yml

report: 
    pattern: /report/{days} 
    defaults: { _controller: "AppReportBundle:Report:dayReport", days: null } 
    requirements: 
     days: -?\d+ 

report_reroute: 
    pattern: /report/ 
    defaults: 
     _controller: FrameworkBundle:Redirect:redirect 
     route: report 
     permanent: true 

由於要求是正規表達式模式它可以讓你有一個負數。

的重新路由部分強制路線/report//report
重定向你可以閱讀一下:Cookbok Entry - Elnur's Answer

有了這樣的行爲,你會:

Route  | Action     | Parameters 
------------|------------------------|------------- 
/report  | dayReportAction  | $days = null 
/report/ | 301 to /report   | 
/report/60 | dayReportAction  | $days = 60 
/report/-4 | dayReportAction  | $days = -4 
/report/foo | 404     | 
+0

是否有可能在引用順序中禁用路由中的其他部分,例如,使用以前的路由:'其中'/ report /'可以是可選的,因此結尾將是:'a-lot-of-other-stuff/40',假設我有默認行爲包括在我的路線?我們怎麼能做到這一點? –

+0

@Félix您可能希望創建一條到同一控制器操作的新路線。如果您對完整答案感興趣,則應該創建一個新問題。 – Touki

+0

我在這裏創建了一個新問題,請訪問它:http://stackoverflow.com/questions/21766700/intermediate-route-optional-parameters-in-symfony-2 –