簡體   English   中英

Symfony2帶有前綴可選值的路由

[英]Symfony2 Routes with prefixed optional values

我的網址結構有以下要求。

/{category}.html

/{category}-color-{color}.html

/color-{color}.html

所有這些url都指向一個控制器,該控制器根據給定的過濾器信息為我的目錄項生成過濾視圖。 除了提到的類別和濾色器之外,還有一些前綴(例如length-12 )和非前綴的片段。 后者具有不同的正則表達式模式。

所以我的問題是:在Symfony2中,有沒有一種方法可以通過一條路由來解決此要求?

如果目前已完成:

  1. 為每種可能的組合生成路線。
    • 那行得通,但是它給了我15條路線。 添加更多的過濾器片段將導致更多的路由。
  2. 使用路徑/{category}{color}{length}.html生成一條路由,並將前綴放在要求中。
    • 感覺有點臟。 網址/color-red.html在匹配/color-red.html提供[color => 'color-red'] ,因此前綴“ color-”必須手動清除。 另一方面,URL的生成要求我在值上加上前綴( $router->generate('foo', ['color' => 'color-red']); ),因此當需要使用其他步驟時,基於例如數據庫信息生成URL。
  3. 構建一個匹配所有組合的獨立正則表達式。
    • 這也可以,但是它沒有使用路由組件,因此無法使用$router->match()$router->generate()來處理網址。 模式是:
/^((?P<category>([a-z]+))(\.html|-))?(length-(?P<length>([1-9][0-9]?))(\.html|-))?(color-(?P<color>([a-z]+))\.html)?$/i

再有,有沒有一種方法可以解決此問題,而又不會破壞$router->match()$router->generate() 任何幫助表示贊賞。

用擴展功能替換symfony的默認路由器服務(也就是使用擴展了Symfony\\Component\\Routing\\Router名稱@router定義新服務),其中包含幫助函數或擴展的generate()方法。

然后,使用能夠匹配路由的解決方案2,而無需手動創建所有那些路由。

也許考慮將一條路線分成至少3條路線。 順序很重要,因為第一個匹配的路線會獲勝。

/{category}-color-{color}.html
/color-{color}.html
/{category}.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM