2016-04-18 13 views
0

私は1つの問題に悩まされており、それから抜け出せません。同じパターンで2 Symfonyのルート、どのように?

同じように見えるが、別のコントローラにルーティングする必要がある2つのURLがあります。

  1. mysite.com/{alias} => mysite.com/contactに時間がかかります。 mysite.com/about...etc コントローラ:AppBundle:デフォルト:page.html.twig

  2. mysite.com/{alias} =>私は自分のデータベースを持っているお店のリストを取るようになります。例:mysite.com/ebay; mysite.com/apple...etc コントローラ:AppBundle:ショップ:

index.html.twigあなたがそれを行うだろうか? symfonyはあなたのrouting.ymlで定義された順序で、一つ一つ、すべてのルートを照合しようとしますので、同じパターンを使用して、事前

+0

あなたはコントローラを作成します:AppBundle:デフォルト:page.html.twigアクションの代わりにテンプレートが表示されます。また、/ contact、/ aboutな​​どのサイトに対して実際に異なるアクションを使用する必要があります。 1つしか使用しない理由がありますか? –

+0

はい、私は私の古いルーティング/ eBay、/amazon...etcを持っていなければなりません。そうでなければ、私のすべてのGoogleランクが失われます:) 乾杯 – MimosaBerlin

答えて

3

おかげで、良いアイデアではありません。したがって、最初のパターンが一致すると、2番目のパターンは常に無視されます。

あなたのパターンをより正確にすることをお勧めします。静的なページ(/ contact、/ aboutな​​ど)の正確なパターンを持ち、それぞれに対してコントローラアクションを持つ必要があります。必要がない場合は、1つのアクションに複数の@Routeアノテーションを定義するか、@Routeアノテーションにrequirementsを定義することができます。 (@Route("/{alias}", requirements={"alias"="(contact|about)"}など)

次に、お店のリストの代替パターン/{alias}を使用できます。

EDIT: 目的は、しかし、あなたが既に持っている同じ動作で、代わりにそれらのいくつかを持っているために、すべてのケースに合わせて、単一のRegexを有するのです。

あなたは(この正確な順序で)このように、ルーティング定義する場合:

​​

をあなたが意図したとおり、これは動作するはずです。

ユーザーがyoursite.com/contactにアクセスすると、最初のパターンが一致するため、連絡先ページが表示されます。

yoursite.com/aboutにアクセスすると、最初のパターンは失敗しますが、2番目のパターンは一致し、ユーザーはaboutページを表示します。

ユーザ訪問yoursite.com/ebay場合、第一及び第二のパターンは失敗するが、第三のは一致し、従ってユーザは​​スラグに関連ショップページが表示されます。

+0

乾杯。私が一番上に述べたように、アプリの古いルーティングのためにこれらのパターンを維持する必要があります。そうしないと、Googleのランキングの50%が失われます。 私は@Route( "/ {エイリアス}"というアイデアを考えましたが、要件は{"エイリアス" = "(コンタクト| about)}})ですが、私のアプリケーションは8種類の言語になっています。かなり大きいでしょう。 requirements = {}にリストの翻訳ファイルを探すより良い方法がある場合のみ。このようなことを知っていますか? – MimosaBerlin

+0

私が知る限り、国際化はできません。あなたのGoogleランキングについては、URLパターンを変更する必要はありませんでした。つまり、ルーティングでのパターンの定義方法を変更する必要があります。私の解決策は、現在のURLスキーマを維持し、Symfonyフレームワークの中でよりうまく処理することを意図しています。私はいくつかの明確化を追加するために編集します。 – Terenoth

+0

ところで、あなたは今どのようにあなたのルートを国際化していますか?ルート定義やコントローラのアクションのようなコードを貼り付けることができますか? – Terenoth

関連する問題