2012-08-23 50 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