2011-06-11 51 views
0

我想創建一個symfony路由規則,其中可以有多個級別,但最重要的只是一個。爲了更好的解釋,這裏是一個例子:symfony路由規則中的許多級別的類別

home_category: 
    url: /:sf_culture/:category1/:category2/:category3/:category4/:slug 
    class: sfCategoryRoute 
    param: { module: category, action: index } 
    requirements: 
    sf_culture: (?:es|en) 

:類別[N]是dinamics,可以來一個O很多,最後是對我很重要。任何想法?

非常感謝。

回答

0

我的解決辦法是擴大sfRequestRoute,並覆蓋matchesUrl方法,像:

public function matchesUrl($url, $context = array()) 
{ 
    $url_tmp = explode('/', substr($url, 1)); 
    $url = (count($url_tmp)>1) ? '/'.$url_tmp[0].'/'.end($url_tmp) : $url ; 

    if (false === $parameters = parent::matchesUrl($url, $context)) 
    { 
     return false; 
    } 
.... 

所以,規則/:類捕獲/組別/類別2和/類別1和類別1 /產品組別/類別3,等。

要小心,因爲這條規則也會在你的應用中捕獲所有的路由,所以在返回參數之前,你需要在方法內部應用額外的驗證。

感謝您的回覆。

0

我覺得這樣的事情可能做的伎倆:

home_category_1: 
    url: /:sf_culture/:category1/:slug 
    param: { module: category, action: index } 
home_category_2: 
    url: /:sf_culture/:category1/:category2/:slug 
    param: { module: category, action: index } 
home_category_3: 
    url: /:sf_culture/:category1/:category2/:category3/:slug 
    param: { module: category, action: index } 
home_category_4: 
    url: /:sf_culture/:category1/:category2/:category3/:category4/:slug 
    param: { module: category, action: index } 

...相同的模塊/動作匹配到每個可能的URL模式。如果URL需要非常深的級別,我可能會考慮把中間部分變成一個單一的變量,但也許別人有一個更優雅的解決方案。