2015-01-07 12 views
6

Próbuję skonfigurować system routingu z subdomeną reprezentującą bieżące ustawienia narodowe. Routing jest ustawiony poprzez @Routing adnotacji i wygląda następująco:Routing Symfony - ustawienia regionalne jako subdomena z powrotem do domyślnego

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

działa dobrze dla URL jak en.somedomain.com lub de.somedomain.com, ale nie znajdzie prawidłowej trasy dla somedomain.com bez lokalizacji.

Rozumiem, że ze względu na parametr host, że jest ustawiony do reprezentowania dokładny locale.domain wzór, ale nie mogę znaleźć sposób, aby powiedzieć systemu routingu Symfony, że nie może być dodatkowy, domyślny host.

Przeszukałem wszystko, ale nie znalazłem nic szczególnego. Doceniam każdą pomoc!

UPDATE

Tu jest rzeczywiście sposób to zrobić, dodając kolejną @Route w adnotacji, bez host parametru:

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

ale to wygląda trochę brudny, a ja nie jestem używając tam parametru %domain%, co jest dla mnie ważne - powiedzmy, gdybym potrzebował innej subdomeny dla wersji mobilnej.

Odpowiedz

5

Cóż, wygląda na to potrójne routingu adnotacji do obsługi locale + subdomena jest jedynym wyborem dla teraz.

Dokumentacja do nauki (na przykład this article) pokazuje, że programiści Symfony zachęcają nas do tego w ten sposób, co dla mnie nie jest miłe. Jednak tutaj jest rozwiązanie ...

/** 
* @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%"} 
*) 
*/ 

Zauważ, że zamówienie jest ważne, począwszy od subdomen, przejście do domyślnego. Jak wygląda to brzydko z @Route adnotacji, zdecydowałem się ponownie napisać to w YAML także:

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%" } 

Zamówiliśmy również. Może ktoś natknie się na niego i użyje go.

0

Po prostu miałem podobny problem z domyślnymi ustawieniami, chociaż był to parametr trasy, a nie locale.

Rozwiązanie polegało na zastąpieniu znaków = tak, jak powinno, a kompilator jakoś nie narzeka na to.

Więc spróbuj to jedno:

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

Warto wiedzieć, że mój problem nie dotyczy błędów kompilatora; to Symfony "Nie można znaleźć prawidłowego wyjątku trasy", gdy zażądam domeny domyślnej. Problem polega na tym, że nie mogę zdefiniować wielu parametrów "hosta", takich jak: 'host = {" {locale}. {Domain} "," {domain} "}'. Adnotacje ponad wszystko dobrze i działa. – Nevertheless

+0

Myślałem, że przyczyną problemu jest to, że Symfony "nie widzi" tego domyślnego ustawienia lokalnego i dlatego nie może dopasować do niego trasy; ponieważ nie otrzymałem wcześniej żadnych błędów kompilatora, ale mój domyślny parametr po prostu nie działał. –