[英]Symfony2 Routes with prefixed optional values
我的網址結構有以下要求。
/{category}.html
/{category}-color-{color}.html
/color-{color}.html
所有這些url都指向一個控制器,該控制器根據給定的過濾器信息為我的目錄項生成過濾視圖。 除了提到的類別和濾色器之外,還有一些前綴(例如length-12 )和非前綴的片段。 后者具有不同的正則表達式模式。
所以我的問題是:在Symfony2中,有沒有一種方法可以通過一條路由來解決此要求?
如果目前已完成:
/{category}{color}{length}.html
生成一條路由,並將前綴放在要求中。
/color-red.html
在匹配/color-red.html
提供[color => 'color-red']
,因此前綴“ color-”必須手動清除。 另一方面,URL的生成要求我在值上加上前綴( $router->generate('foo', ['color' => 'color-red']);
),因此當需要使用其他步驟時,基於例如數據庫信息生成URL。 $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.