1

ルートの注釈を含む URL を作成しようとしています。

問題は、大なり小なり、または異なる URL を記述できることです。

@Route("/{staat}/", name="showStaats",requirements={"location" = "berlin|bayern|brandenburg"})

www.example.com/berlinこの URL には、と の両方からアクセスできますwww.example.com/Berlin

ただし、それは の下でのみ達成可能であると思いwww.example.com/berlinます。

4

2 に答える 2

2

「大文字と小文字を区別しないルーティング要件を作成する方法」という質問への回答:

次のように、大文字と小文字を区別しない修飾子を要件正規表現に追加できます。

(?i:berlin|bayern|brandenburg)

于 2015-02-17T20:56:12.687 に答える
1

があります"/{staat}/"が、要件が設定されています"location" = ...。これらは一致する必要があるため、それが問題の原因である可能性があります。

ルートに状態のリストをハードコーディングしたくない場合は、サービス コンテナー パラメーターに状態のリストを挿入できます。その方法については、ドキュメントのルートでサービス コンテナー パラメーターを使用する方法を参照してください。

その状態がすべて小文字であるかどうかを確認したいだけの場合は、次の要件を試すことができます。

staat: "[a-z-]+"

これは、小文字とダッシュのみに一致する必要があります (例: "sachsen-anhalt")。しかし、ルーターの正規表現検出が少し風変わりであるため、これが機能するかどうかは完全にはわかりません。

データベースまたはファイルから状態のリストをフェッチするなどして、プログラムでルートを作成するカスタム ルーター ローダーを作成することもできます。

編集

コメントに書いたように、params のリストを Service Container パラメーターとして追加します。たとえば%my_demo.states%、状態のリストが含まれます。ただし、これが注釈で機能するかどうかはわかりません。そのため、これを機能させる簡単な回避策を次に示します。

あなたはパラメータapp/config/config.ymlを追加し%my_demo.states%ます:

my_demo:
    states: ["berlin", "brandenburg", "sachsen-anhalt", ... ]

あなたapp/config/routing.ymlには次のようなものがあるはずです:

my_demobundle:
    resource: "@MyDemoBundle/Controller/"
    prefix:   /
    type:     annotation

type: annotationand@MyDemoBundleが該当部分です。このルートの前に次のルートを追加して、優先されるようにします。

showStaats:
    path:     /{state}
    defaults: { _controller: MyDemoBundle:State:index }
    requirements:
        state: %my_demo.states%

これにより、状態のリストをパラメーターとして使用して、注釈のに適用されるルートが追加されます。yml/注釈ベースのルーティングを混在させているため、これは少し粗雑ですが、保守が容易であることは言うまでもなく、注釈に16の状態のリストを詰め込むよりも優れています。

于 2013-06-24T13:54:17.593 に答える