2011-09-08 35 views
5

Tôi đang viết lại một dự án cũ bằng Symfony2 để tôi có thể thử khung. Tôi có các url sẽ có dạng:Làm cách nào để định tuyến URL bằng chuỗi truy vấn trong Symfony2?

/profile/{id} 

theo cách snazzy mà Symfony2 thực hiện. Tuy nhiên, cùng một trang ban đầu được tìm thấy bằng cách thực hiện:

/profile.php?id=12345 

Vì vậy, trong trường hợp ai đó có URL cũ, tôi muốn chuyển hướng các liên kết này. Vấn đề là, tôi không biết cách bắt các tuyến đường này. Tôi đã thử

/profile.php?id={id} 

nhưng điều đó dường như không hoạt động. Làm cách nào tôi có thể thiết lập tuyến đường này?

Theo dõi: Tôi không muốn làm "bắt tất cả" (vì nó không trực quan với tôi vì vậy tôi sợ các lỗi trong tương lai) và tôi không muốn làm điều đó thông qua htaccess cho cùng một lý do. Tôi nghĩ rằng tùy chọn tốt nhất là để phù hợp với "/profile.php" sau đó trong bộ điều khiển, kiểm tra xem "id" tồn tại trong chuỗi truy vấn và chuyển hướng cho phù hợp. Nếu không, tôi sẽ chuyển hướng đến 404.

Trả lời

3

tôi thấy hai tùy chọn ở đây:

  1. Bạn map schema cũ của bạn (/profile.php?id=54321) vào mới (/ profile/54321) sử dụng mod_rewrite (trong trường hợp bạn sử dụng Apache).

  2. Bạn viết một người lập bản đồ trong Symfony. Điều đó có nghĩa vào cuối danh sách các tuyến đường mà bạn chỉ định một mô hình mà sẽ chỉ bắt tất cả mọi thứ vẫn chưa đánh bắt:


whatever: 
    pattern: /{whatever} 
    defaults: { _controller: CoreBundle:Default:whatever } 
    requirements: 
    whatever: .+ 

Đối với (2), bạn sẽ phải kiểm tra những gì Yêu cầu-đối tượng cung cấp cho bạn các truy vấn (như getQueryString()), b/c Tôi không chắc chắn nếu nó có thể có một cái gì đó như? Xyz được xuất hiện trong một tuyến đường.

+0

Mod_rewrite đúng là: 'RewriteRule^profile.php? Id = (\ d +) $/profile/$ 1 [R = 301]'? –

+0

Tôi chỉ muốn xác minh đây là chiến lược tốt nhất, vì tôi không phải là chuyên gia về Apache htaccess shenanigans –

+0

Tôi cũng vậy. Bạn có thể kiểm tra viết lại ở đây: http://martinmelin.se/rewrite-rule-tester/. Mặc dù tôi muốn xử lý điều đó với SF. Bởi vì các tuyến đường ngày nay là một phần của mô hình/logic. – Raffael

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