2015-01-07 19 views
6

現在のロケールを表すサブドメインを持つルーティングシステムを設定しようとしています。ルーティングは@Routingアノテーションを介して設定されたとは以下のように見えます。Symfonyルーティング - デフォルトへのフォールバックを伴うサブドメインとしてのロケール

/** 
* @Route(
*  "/", 
*  name="homepage", 
*  host="{locale}.{domain}", 
*  defaults={"locale" = "en", "domain" = "%domain%"}, 
*  requirements={"locale" = "en|de|fr", "domain" = "%domain%"} 
*) 
*/ 

は、URLのen.somedomain.comde.somedomain.comように適していますが、ロケールなしで、somedomain.comの正しいルートを見つけることができません。

私は理由hostパラメータの、それは正確なlocale.domainパターンを表すように設定されているが、私は、追加、デフォルトhostがあるかもしれないことをsymfonyのルーティングシステムを伝える方法を見つけることができないということ。理解

これですべてを検索しましたが、特に何も見つかりませんでした。助けていただければ幸いです!

UPDATE

hostパラメータを指定せずに、注釈内の別の@Routeを追加することによって、それを行うための方法、実際にあります:

/** 
* @Route(
*  "/", 
*  name="homepage_default", 
*  defaults={"locale" = "en"} 
*) 
*/ 

はなく、少し汚れのthatsに見える、と私はありません%domain%パラメータを使用して、私にとっては重要です - たとえば、私はモバイル版のために別のサブドメインが必要でしょう。

答えて

5

まあ、ロケール+サブドメインを処理するためのトリプル注釈ルーティングは今のところ唯一の選択肢であるように見えます。

ドキュメントを勉強していること(例えば、this article)は、Symfonyの開発者が私にそのようにすることを奨励していることを示しています。しかし、ここに解決策があります...

/** 
* @Method({"GET"}) 
* @Route(
*  "/", 
*  name="homepage", 
*  host="{mobile}.{_locale}.{domain}", 
*  defaults={"mobile" = "moblie", "locale" = "%locale%", "domain" = "%domain%"}, 
*  requirements={"mobile" = "mobile|m", "_locale" = "%locale%|de|fr", "domain" = "%domain%"} 
*) 
* @Route(
*  "/", 
*  name="homepage", 
*  host="{_locale}.{domain}", 
*  defaults={"_locale" = "%locale%", "domain" = "%domain%"}, 
*  requirements={"_locale" = "%locale%|de|fr", "domain" = "%domain%"} 
*) 
* @Route(
*  "/", 
*  name="homepage_default", 
*  defaults={"_locale" = "%locale%"} 
*) 
*/ 

サブドメインから始まり、デフォルトに下がることに注意してください。これは@Route注釈で醜いように、私は同様にYAMLでこれを再書き込みすることを決定しました:だけでなく

homepage_locale_mobile: 
    path: /
    host:  "{mobile}.{_locale}.{domain}" 
    defaults: { mobile: "mobile", _locale: "%locale%", domain: "%domain%" } 
    requirements: 
     mobile: "mobile|m" 
     _locale: "%locale%|de|fr", 
     domain: "%domain%" 

homepage_locale: 
    path: /
    host:  "{_locale}.{domain}" 
    defaults: { _locale: "%locale%", domain: "%domain%" } 
    requirements: 
     _locale: "%locale%|de|fr", 
     domain: "%domain%" 

homepage: 
    path: /
    defaults: { _locale: "%locale%" } 

を命じました。たぶん誰かが出てきて、それを使うだろう。

0

これはルートパラメータでありロケールではありませんでしたが、デフォルトで同様の問題が発生しました。

解決策は、=記号を次のように置き換えることでした:それはそうでなければならず、コンパイラは何とかそれについて文句を言っていません。

だから、この1つを試してみてください。

/** 
* @Route(
*  "/", 
*  name="homepage", 
*  host="{locale}.{domain}", 
*  defaults={"locale" : "en", "domain" : "%domain%"}, 
*  requirements={"locale" : "en|de|fr", "domain" : "%domain%"} 
*) 
*/ 
+0

これは非常に便利ですが、私の問題はコンパイラエラーではありません。 symfonyのデフォルトのドメインを要求すると、正しいルートの例外を見つけることができません。そして問題は、 'host = {" {locale}。{domain} "、" {domain} "}'のような複数の 'host'パラメータを定義できないことです。上記の注釈はすべて上手く機能しています。 – Nevertheless

+0

問題の原因はSymfonyがデフォルトのロケール設定を「見ることができない」ということだと思っています。以前はコンパイルエラーは発生していませんでしたが、私のデフォルトパラメータはうまくいかなかったからです。 –

関連する問題