2012-05-03 24 views

Trả lời

12

Bạn có nghĩa là trình giữ chỗ có yêu cầu không?

blog: 
    pattern: /blog/{page} 
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 
    requirements: 
     page: \d+ 

Ở đây bạn có nhiều tuyến đường được xác định bởi trình giữ chỗ, được xác thực bằng cụm từ thông dụng sẽ thực hiện cùng một hành động điều khiển.

Chỉnh sửa:

Mỗi phần của url có thể là trình giữ chỗ.

blog: 
    pattern: /{type}/{page} 
    defaults: { _controller: AcmeBlogBundle:Blog:index, page: 1 } 
    requirements: 
     type: blog|articles 
     page: \d+ 
+0

câu trả lời @svassr cập nhật – ilanco

+0

gì nếu tôi muốn có loại omittable? Ví dụ, làm thế nào bạn sẽ xác định một lộ trình cho: '/ posts/sport/2',' posts/sport', 'posts/2'. Vì vậy, các tuyến đường chung là: '/ posts/{category}/{page}', nhưng - rõ ràng - nó không chỉ hoạt động với các giá trị mặc định. Có cách nào để nói với symfony làm thế nào để nhận ra nếu param thứ hai là string/int? –

24

Khi sử dụng chú thích, bạn có thể xác định nhiều tuyến đường. Như thế:

/** 
* @Route ("item1") 
* @Route ("item/2") 
* @Method("GET") 
*/ 
public function itemAction() { 

} 

Tôi đang sử dụng phiên bản 2.0.9

+2

Điều đó thực sự thú vị, tôi thích ý tưởng có các định tuyến liên quan được định nghĩa ngay trước một _Action_, nhưng tôi muốn giữ mọi thứ chỉ trong một _routing.yml_ thay vì truyền bá các quy tắc định tuyến của tôi trong tất cả các bộ điều khiển của mình – svassr

+5

Như bạn có thể có app/console open, đừng quên router: debug command để xem tất cả các route của bạn. Nếu bạn sử dụng chú thích, bạn sẽ nhận được tên hợp lý cho tuyến đường của mình theo mặc định, do đó, thực sự rất dễ dàng để tìm bộ điều khiển. – cvaldemar

+1

Không thể giữ tất cả các tuyến trong một tệp khi bạn sử dụng nhiều gói (khi bạn bao gồm các tuyến dưới dạng tài nguyên trong ứng dụng chính 'routing.yml'), vì vậy đây không thực sự là một đối số cho định tuyến. Chú thích rất dễ sử dụng, dễ dàng gỡ lỗi ('router: debug') và có thể cấu hình (bạn có thể đặt tên riêng của bạn ví dụ:' @Route ("/", name = "homepage") '). – Wirone

4

Chú thích ví dụ cho các tuyến với các thông số:

/** 
* @Route("/shops/{page}", name="shops") 
* @Route("/shops/town/{town}/{page}", name="shops_town") 
* @Route("/shops/department/{department}/{page}", name="shops_department") 
*/ 
public function shopsAction(Town $town = null, Department $department = null, $page = 1) 
{ ... } 

Sau đó, tạo ra tuyến đường trong cành lá như thế này:

{{ path('shops_town') }} 

hoặc

{{ path('shops_town', {'town': town.id}) }} 

hoặc

{{ path('shops_department', {'department': department.id}) }} 
Các vấn đề liên quan