2012-08-23 82 views
0

我有幾個規則的routing.ymlSymfony的行走1.4第一條規則覆蓋下一個規則中的routing.yml

homepage: 
    url: /
    param: { module: cars, action: index } 

letters: 
    url: /:letter 
    class: sfPropelRoute 
    options: 
    model: MyCarmodelPeer 
    type: object 
    param: 
    module: cars 
    action: alphalist 
    linkmode: "@letters" 
    requirements: 
    letter: "([A-Z])" 
    sf_method: [get] 

show: 
    url: /:slug 
    class: sfPropelRoute 
    options: 
    model: MyCarmodelPeer 
    type: object 
    param: 
    module: cars 
    action: view 
    linkmode: "@show" 
    requirements: 
    slug: "([A-Z]|0-9)" 
    sf_method: [get] 


default: 
    url: /:module/:action/* 

路線的主網頁按預期工作。 但字母和顯示路線無法正常工作。 如果第一個路由字母那麼它正常工作,並且路由顯示不起作用。在這種情況下,我在解析URL「/ bmw-1-series-187-5-120-2004-2008」(/)後出現錯誤空模塊和/或操作。 如果我重新排列它們,則字母指向動作視圖,但它應該指向動作alphalist。

他們爲什麼互相覆蓋?

修訂

這裏有一個情況下,其他的網站,那上工作。

letters: 
    url: /:letter 
    param: 
    module: define 
    action: alphalist 
    linkmode: "@letters" 
    cachename: "letters" 
    layer: "@default-layer" 
    requirements: 
    letter: "([A-Z]|0-9)" 

disclaimer: 
    url: /medical-disclaimer/ 
    param: 
    module: define 
    action: disclaimer 

default-layer: 
    url: /:search 
    param: 
    module: define 
    action: word 
    linkmode: "@default-layer" 
    cachename: "default-layer" 
    options: 
    segment_separators: ['', '/'] 

回答

1

它們互相重疊,因爲symfony試圖解決它的方式是一樣的。

你爲show,這意味着將URL /和之後的東西,像/foo/toto定義url: /:slug。但是您也爲letters/:letter定義了這種網址,它可以匹配/foo/toto

這就是爲什麼當您首先定義show路線時,show起作用,但letters不起作用。反之亦然。

您必須解決的方法是爲每條路線定義唯一的 url。喜歡的東西:

letters: 
    url: /letters/:letter 

show: 
    url: /show/:slug 

這樣,每個路線不會對方,因爲前綴(字母&顯示)的。

編輯:

我得到了這一點,你需要能幫助的symfony即使有與/:slug都是匹配的URL。

對於letter路線,您的要求只允許一個字母upercase。但是對於show路由,它允許一個字母或一個數字。關於您的網址有哪些錯誤(bmw-1-series-187-5-120-2004-2008)。

嘗試用這一要求,對於show路線(你可以刪除我之前給了前綴):

requirements: 
    slug: "([a-z0-9\-]+)" 
+0

這怪的時候我tryed,但即使我已清除了高速緩衝存儲器應用解決方案,問題沒有解決。但在像我這樣的其他項目路由工作中。請看我更新的問題。 – VaL

+0

您是否改變了構建網址的方式?他們的網址中是否有'/ letters /'和'/ show /'? – j0k

+0

是的,他們是。如前所述,我改變了它們。 – VaL