0

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" (/) を解析した後、Empty module and/or action というエラーが発生します。 それらを再配置すると、文字はアクション ビューを指しますが、アクション アルファリストを指す必要があります。

なぜそれらは互いに上書きするのですか?

更新しました

これは、別のWebサイトで機能したケースです。

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: ['', '/']
4

1 に答える 1

1

symfony が解決しようとする方法が同じであるため、それらは互いにオーバーライドします。

を定義url: /:slugしましたshow。これは、URL が のようになり、その後に , のようなものがあることを意味し/ます。しかし、この種の URL を にも定義しました。これは、および にも一致します。/foo/totoletters /:letter/foo/toto

showそのため、最初にルートを定義すると、show機能しますが機能しlettersません。およびその逆。

それを修正する方法は、ルートごとに一意のURLを定義することです。何かのようなもの:

letters:
  url: /letters/:letter

show:
  url: /show/:slug

このように、プレフィックス(文字とショー)のために、各ルートが互いに食べ合うことはありません。

編集:

要点はわかりました。あなたの要件は、symfony が URL を一致させるのに役立ちます/:slug

ルートの場合、要件ではletter大文字を 1 文字だけ許可します。ただし、showルートについては、1 文字の大文字または 1 つの数字を許可します。あなたの URL ( bmw-1-series-187-5-120-2004-2008) について間違っているのはどれですか。

ルートについて、この要件を試してくださいshow(以前に指定したプレフィックスを削除できます)。

  requirements:
   slug: "([a-z0-9\-]+)"
于 2012-08-24T07:28:31.503 に答える