Symfony 1.4第一条规则覆盖routing.yml中的下一条规则
我在routing.yml中有几个规则Symfony 1.4第一条规则覆盖routing.yml中的下一条规则,routing,symfony-1.4,Routing,Symfony 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: "@l
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”(/)后,我有一个错误空模块和/或操作。
如果我重新排列它们,字母会指向动作视图,但它应该指向动作列表
为什么它们会互相覆盖
已更新
这是另一个网站上的一个成功案例
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: ['', '/']
它们相互覆盖,因为symfony尝试解决它的方式是相同的 您为
show
定义了url://:slug
,这意味着url将是/
和后面的内容,如/foo
,/toto
。但是您也为字母定义了这种url,它也可以与/foo
和/toto
匹配
这就是为什么当您首先定义show
路线时,show
起作用,而letters
不起作用。反之亦然
解决这个问题的方法是为每个路由定义唯一的url。比如:
letters:
url: /letters/:letter
show:
url: /show/:slug
这样,每条路线不会因为前缀(字母和显示)而互相吃掉
编辑:
我明白了,您的要求可以帮助symfony匹配url,即使两者都有/:slug
对于字母
路线,您的要求只允许一个字母大写。但是对于show
路线,它允许一个字母大写或一个数字。关于您的url(bmw-1-series-187-5-120-2004-2008
)哪个是错误的
对于show
路线,尝试此要求(您可以删除我之前给出的前缀):
当我尝试应用您的解决方案时,这很奇怪,但即使在我清除缓存后,问题仍然没有解决。但在其他项目中,如我的路由正在工作。请查看我的更新问题。您是否更改了构建url的方式?你的url中有/letters/
和/show/
吗?是的。如前所述,我对它们进行了更改。默认图层也会出现同样的问题,而且更新时会显示更新后的字母路径。你在申请我的更改后也犯了同样的错误?我当然申请了你的更改。见所附屏幕截图,,。我最新的问题只是说明,在其他网站上,这种路由是可行的。在我的情况下,这不是。
requirements:
slug: "([a-z0-9\-]+)"