2012-08-02 39 views
7

Tôi có trong routing.yml của tôi đã chỉ định các yêu cầu _locale tham số trong mỗi tuyến đường duy nhất và tôi nghĩ rằng đó phải là thứ để đơn giản hóa tình huống này.Symfony2 Định tuyến các yêu cầu toàn cầu {_locale}

routing.yml

ProjectBaseBundle_index: 
    pattern: /{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:index } 
    requirements: 
     _locale: en|es 

ProjectBaseBundle_privacy: 
    pattern: /privacy/{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:privacy } 
    requirements: 
     _locale: en|es 

..... 

ProjectBaseBundle_legal: 
    pattern: /legal/{_locale} 
    defaults: { _controller: ProjectBaseBundle:Default:legal } 
    requirements: 
     _locale: en|es 

Tôi đang sử dụng Symfony2.1 beta 3

là có thể chỉ định một yêu cầu _locale toàn cầu cho tất cả các tuyến đường của tôi?

+0

Bạn đang làm việc với phiên bản Symfony nào? – j0k

+0

Symfony 2.1, tôi không đề cập đến vì tôi nghĩ đó là chức năng "cũ" của khung – unairoldan

Trả lời

11

tôi đã phát hiện ra một cách để làm điều đó:

Sử dụng một "bậc thầy" định tuyến để nhập khẩu các cấu hình định tuyến. Vì các gói của tôi thường có quá nhiều thông tin, tôi đã tách các bộ điều khiển, tài nguyên và các tuyến trong các "mô-đun" khác nhau. Kết quả của phương pháp đó, tôi đã phát hiện ra điều này:

Thạc sĩ routing.yml

ProjectBaseBundle_default: 
    resource: "@ProjectBaseBundle/Resources/config/routing-default.yml" 
    prefix: /{_locale}/project/ 
    requirements: 
     _locale: en|es|de|fr 

Child routing-default.yml

ProjectBaseBundle_default_privacy: 
    pattern: /privacy 
    defaults: { _controller: ProjectBaseBundle:Default:privacy } 

ProjectBaseBundle_default_legal: 
    pattern: /legal 
    defaults: { _controller: ProjectBaseBundle:Default:legal } 

ProjectBaseBundle_default_usage: 
    pattern: /usage 
    defaults: { _controller: ProjectBaseBundle:Default:usage } 

Với cấu hình định tuyến này, tôi hạn chế tối đa những nơi cần phải viết yêu cầu miền địa phương.

+1

Đó là một giải pháp tuyệt vời. Cảm ơn. –

+1

Điều này rất hữu ích. Nhưng tôi đi lang thang. Điều gì sẽ xảy ra nếu tôi muốn một trong các ngôn ngữ được mặc định (nói 'es') để tôi có thể có các tuyến đường như/project/privacy (trỏ ngầm đến 'en' locale) trong khi tôi vẫn chưa rõ ràng/{_ locale} /. .. các tuyến đường cho miền địa phương khác. Có cách nào để nói rằng trong 'master' routing.yml ?. Tôi đã cố gắng với một _locale mặc định ... nhưng đã trở thành một ý nghĩ tuyệt vời. kính trọng – javigzz

+0

Tôi đã không tìm thấy cách để làm điều đó. Khi bạn nhập một lộ trình với/_locale/parameter trước đó, là cần thiết để sử dụng nó. – unairoldan

0

Hãy nhìn vào cuộc thảo luận này:

https://groups.google.com/forum/#!topic/symfony-devs/6oxsa7whBps

Dường như người ta có thể làm điều gì đó tương tự như những gì bạn cần, chỉ rằng {_locale} tham số được quy định tại phần đầu của tuyến đường, không phải ở cuối. Ngoài ra, bạn sẽ cần phải chạy beta 4 của phiên bản 2.1 của symfony (theo Fabien)

+0

Tôi đã thấy cuộc thảo luận này, nhưng được đề ngày tháng 6 năm 2011 – unairoldan

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