2

この順序で 2 つのルートをたどる必要があるとします。

Zip:
  url: home/:zip
  param: { module: home, action: results }

State:
  url: home/:state
  param: { module: home, action: results }

次のようなルートを使用します。

'@State?state=CA'

Zip ルートに解決されるのはなぜですか? ルート名 '@State' を明示的に指定したとき、ルーティング ファイル全体を解析せず、要求した特定のルートを使用しただけだと思いました。

同じアクションを使用して、変数名 (zip または状態) に基づいてデータを表示できるようにしたいのですが、別のパラメーターを渡すためだけに同じアクション (結果) を 2 回作成する必要はありません。

4

3 に答える 3

3

さまざまな形式を認識するように要件を追加する必要があります

Zip:
  url: home/:zip
  param: { module: home, action: results }
  requirements: { zip: \d{5} } # assuming only 5 digit zips

State:
  url: home/:state
  param: { module: home, action: results }
  requirements: { state: [a-zA-Z]{2} }

これで解決するはずですが、ヘルパーでルート名を使用する場合は名前付きルートを使用する必要があることに同意します。

于 2009-03-13T22:01:06.170 に答える
1

ここでの問題は、両方のルーティング ルールが多少同じ URL ( /home/) に解決され、リンクを生成するときに正しい名前付きルートを使用して URL を生成することです。

要件を追加せずに生成された URL (/home/CA など) をクリックすると、一致する routing.yml ファイルの最初のルールと一致し、それが「Zip」ルートになります。

何が起こっているのかを説明するだけです。

于 2009-03-17T10:56:56.990 に答える
0

名前付きルートを使用します。問題は、URL が同じであることです (パラメーター名は関係ありません)。そのため、ブラウザーに URL をロードすると、一致する最初のルートは常に Zip になります。これは、Symfony がどちらが必要かを知る方法がないためです。

追加requirements:は行く方法です。

于 2009-03-15T02:27:39.353 に答える