2011-01-15 33 views
6

Tôi đang sử dụng playframework và tôi hy vọng sẽ tạo ra các url phức tạp như stackoverflow. Ví dụ: tôi muốn tạo url của câu hỏi:Cách tạo url phức tạp như stackoverflow?

http://aaa.com/questions/123456/How-to-generator-a-complex-url 

Lưu ý phần cuối cùng, đó là tiêu đề của câu hỏi.

Nhưng tôi không biết cách thực hiện.

CẬP NHẬT

Trong play framework, chúng ta có thể xác định các tuyến đường trong conf/routes tập tin, và những gì tôi làm là:

GET /questions/{<\d+>id} Questions.show

Bằng cách này, khi chúng ta gọi là @{Questions.show(id)} trong quan điểm, nó sẽ tạo:

http://aaa.com/questions/123456

Nhưng làm thế nào để tạo ra có một phần tiêu đề, là khó khăn.

Trả lời

11

Với playframework thật dễ dàng để tạo url như vậy. Trong các tuyến đường của bạn tập tin bạn thêm này:

GET /questions/{id}/{title}  YourController.yourMethod 

Xem doc trong trang web play framework về định tuyến để biết thêm

trong trang html của bạn:

<a href="@{YourController.yourMethod(id,title.slugify())}"> 

phương thức slugify từ JavaExtensions, sạch tiêu đề của bạn từ các ký tự dành riêng (see doc)

2

Nó là trình ghi đè url phía máy chủ. Trong trường hợp SO, bạn không cần nhập {...}/questions/4698625/how-to-generate-complex-url-like-stackoverflow hoặc {...}/questions/4698625 - cả hai đều chuyển hướng đến cùng một nội dung. Vì vậy, postfix này được sử dụng chỉ để tăng khả năng đọc của một url.

Để xem thêm chi tiết về cách viết lại url, hãy xem this post.

UPD: để tạo ra một postfix như vậy,

  1. mất một tiêu đề của nội dung,
  2. teo nhiều khoảng trắng vào đơn
  3. thay thế tất cả khoảng trắng với dấu gạch ngang (-)
  4. xóa tất cả các ký hiệu không phải chữ cái khỏi tiêu đề

Tốt hơn để thực hiện thao tác này với Biểu thức chính quy

+0

cảm ơn bạn, nhưng phần khó khăn là làm thế nào để làm điều đó trong playframework. – Freewind

+0

@Freewind, xin lỗi, đã đọc sai về playframework – Genius

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