2013-06-12 27 views
5

Trong ứng dụng Symfony2 của tôi, tôi muốn làm cho bốn url có thể với một tuyến đường:Routing trong Symfony2: tham số tùy chọn en Bốn url cho một tuyến đường

  1. a-lot-of-khác-stuff/báo cáo/- 20 (số âm)
  2. a-lot-of-khác-stuff/báo cáo/40 (số dương)
  3. a-lot-of-khác-stuff/báo cáo/(không số)
  4. a-lot- of-khác-stuff/báo cáo (không có số và không có /)

tuyến đường của tôi hiện trông như thế này:

report: 
    pattern: /report/{days} 
    defaults: { _controller: "AppReportBundle:Report:dayReport", days = null } 

Hành vi được định nghĩa là:

này hiện đang tạo url 1 và 2 hoạt động nhưng trong trường hợp url 3 và 4, tôi gặp lỗi

Tuyến đường không được tìm thấy

Làm cách nào để đặt tham số "ngày"?
Và nếu thông số không được cung cấp, làm thế nào tôi có thể cho phép / cũng bị bỏ qua?

+0

Đó là rất lạ. Vì tuyến đường thứ 4 nên hoạt động. Tôi thường sử dụng các tham số tùy chọn nhưng tôi sử dụng định nghĩa Tuyến đường chú thích. Tôi không nên xác định mặc định trong chú thích nếu tôi xác định giá trị mặc định trong chữ ký hàm. Có lẽ bạn cần phải bỏ qua một trong các khai báo mặc định (ví dụ trong routing.yml của bạn) hoặc cố gắng sử dụng giá trị số (hoặc chuỗi/bool) thay vì null. Có lẽ nó sẽ giúp. –

+3

Cấu hình tuyến đường của bạn phải là: 'mặc định: {_controller:" AppReportBundle: Báo cáo: dayReport ", days: null}' – jkucharovic

Trả lời

14

Đây là một cách để làm điều này

routing.yml

report: 
    pattern: /report/{days} 
    defaults: { _controller: "AppReportBundle:Report:dayReport", days: null } 
    requirements: 
     days: -?\d+ 

report_reroute: 
    pattern: /report/ 
    defaults: 
     _controller: FrameworkBundle:Redirect:redirect 
     route: report 
     permanent: true 

Kể từ khi yêu cầu là một mô hình regexp nó cho phép bạn có một số âm.

Phần định tuyến lại buộc con đường /report/ để chuyển hướng trên /report
Bạn có thể đọc về vấn đề này trên: Cookbok Entry - Elnur's Answer

Với hành vi như vậy, bạn sẽ phải:

Route  | Action     | Parameters 
------------|------------------------|------------- 
/report  | dayReportAction  | $days = null 
/report/ | 301 to /report   | 
/report/60 | dayReportAction  | $days = 60 
/report/-4 | dayReportAction  | $days = -4 
/report/foo | 404     | 
+0

Có thể chặn các phần khác trong tuyến đường theo thứ tự được gọi không, ví dụ: sử dụng các tuyến đường trước: ' a-lot-of-other-stuff/report/40 ', trong đó'/report/'có thể là tùy chọn để kết thúc sẽ là:' a-lot-of-other-stuff/40 ', giả sử rằng tôi có các hành vi mặc định được bao gồm trong các tuyến đường của tôi? Làm thế nào chúng ta có thể đạt được điều này? –

+0

@ Félix Bạn muốn tạo một tuyến đường mới cho cùng một hành động điều khiển.Nếu bạn quan tâm đến câu trả lời đầy đủ, bạn nên tạo một câu hỏi mới. – Touki

+0

Tôi đã tạo câu hỏi mới tại đây, vui lòng truy cập vào: http://stackoverflow.com/questions/21766700/intermediate-route-optional-parameters-in-symfony-2 –

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