2015-01-07 14 views
6

Tôi đang cố gắng thiết lập hệ thống định tuyến với tên miền phụ đại diện cho ngôn ngữ hiện tại. Routing được thiết lập thông qua @Routing chú thích và trông như thế này:Định tuyến Symfony - ngôn ngữ là tên miền phụ với dự phòng mặc định

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

Hoạt động tốt cho URL của như en.somedomain.com hoặc de.somedomain.com, nhưng thất bại trong việc tìm con đường đúng cho somedomain.com, mà không locale.

Tôi hiểu rằng vì tham số host, được thiết lập để đại diện cho chính xác locale.domain mẫu, nhưng tôi không thể tìm cách để nói với hệ thống định tuyến Symfony rằng có thể bổ sung, mặc định host.

Tìm kiếm tất cả xung quanh cho điều này, nhưng không tìm thấy gì đặc biệt. Sẽ đánh giá cao sự giúp đỡ nào!

CẬP NHẬT

Có thực sự là một cách để làm điều đó, bằng cách thêm một @Route trong chú thích, mà không host tham số:

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

nhưng thats trông hơi bẩn, và tôi không sử dụng thông số %domain% ở đó, điều quan trọng đối với tôi - giả sử, nếu tôi cần một tên miền phụ khác cho phiên bản di động.

Trả lời

5

Vâng, có vẻ như định tuyến chú thích ba để xử lý locale + subdomain là lựa chọn duy nhất cho bây giờ.

Nghiên cứu tài liệu (ví dụ: this article) cho thấy rằng các nhà phát triển Symfony khuyến khích chúng tôi thực hiện theo cách đó, với tôi, điều đó không tốt đẹp. Tuy nhiên, đây là giải pháp ...

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

ý rằng trật tự là rất quan trọng, bắt đầu từ tên miền phụ, đi xuống để mặc định. Vì đây trông xấu xí với @Route chú thích, tôi đã quyết định viết lại này trong YAML cũng như:

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

Ordered là tốt. Có thể ai đó sẽ bắt gặp và sử dụng nó.

0

Tôi vừa gặp sự cố tương tự với mặc định, mặc dù đó là thông số tuyến đường và không phải là ngôn ngữ.

Giải pháp đã có để thay thế các dấu = bằng: vì nó phải như vậy và trình biên dịch bằng cách nào đó không phàn nàn về nó.

Vì vậy, hãy thử một này ra:

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

Đó là khá hữu ích để biết, tuy nhiên, vấn đề của tôi không phải là với lỗi trình biên dịch; đó là trường hợp ngoại lệ 'Không thể tìm thấy lộ trình' chính xác của Symfony khi tôi yêu cầu miền mặc định. Và vấn đề là tôi không thể định nghĩa nhiều tham số 'host', như:' host = {"{locale}. {Domain}", "{domain}"} '. Chú thích trên tất cả đều tốt đẹp và hoạt động. – Nevertheless

+0

Tôi nghĩ nguyên nhân của vấn đề là Symfony "không thể nhìn thấy" cài đặt miền địa phương mặc định và đó là lý do tại sao nó không thể khớp với một tuyến đường với nó; bởi vì tôi đã không nhận được bất kỳ lỗi trình biên dịch nào trước đây nhưng thông số mặc định của tôi không hoạt động. –

Các vấn đề liên quan