Symfony 1.4第一条规则覆盖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

我在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”(/)后,我有一个错误空模块和/或操作。 如果我重新排列它们,字母会指向动作视图,但它应该指向动作列表

为什么它们会互相覆盖

已更新

这是另一个网站上的一个成功案例

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\-]+)"