Tôi có hai vấn đề với URL thân thiện với người dùng.Zend Framework - thiết lập URL thân thiện với người dùng với các tuyến đường và regex
Tôi đã một router thiết lập như sau:
- URL thực tế là
http://www.example.com/course/view-batch/course_id/19
- Tôi muốn có một URL thân thiện hơn
http://www.example.com/java-training/19
tôi đã thiết lập các tuyến đường sau trong application.ini
:
resources.router.routes.viewbatchcourse.route = "/:title/:course_id/"
resources.router.routes.viewbatchcourse.defaults.controller = course
resources.router.routes.viewbatchcourse.defaults.action = view-batch
resources.router.routes.viewbatchcourse.reqs.course_id = "\d+"
Tác phẩm này có hiệu quả ectly tốt.
Bây giờ tôi có một trang mới - trong đó có đánh giá sử dụng cho Java
- URL thực tế là
http://www.example.com/course/view-reviews/course_id/19
- Tôi muốn có một URL thân thiện hơn
http://www.example.com/java-reviews/19
Tôi nhận ra mình không thể vì một tuyến đường đã được thiết lập để khớp với định dạng đó.
Vì vậy, tôi đã suy nghĩ nếu nó có thể sử dụng regex và kiểm tra xem tiêu đề có chứa "đánh giá" sau đó sử dụng tuyến đường này.
Tôi đã thử cách tiếp cận này, nhưng nó không hoạt động. Thay vào đó, nó sẽ mở trang xem hàng loạt:
resources.router.routes.viewreviews.type = "Zend_Controller_Router_Route_Regex"
resources.router.routes.viewreviews.route = "/:title/:course_id"
resources.router.routes.viewreviews.defaults.controller = "course"
resources.router.routes.viewreviews.defaults.action = "view-reviews"
resources.router.routes.viewreviews.reqs.course_id = "\d+"
resources.router.routes.viewreviews.reqs.title = "\breviews\b"
Gần nhất tôi đã có này để làm việc là
resources.router.routes.viewreviews.route = "/:title/:course_id"
resources.router.routes.viewreviews.defaults.controller = "course"
resources.router.routes.viewreviews.defaults.action = "view-reviews"
resources.router.routes.viewreviews.reqs.course_id = "\d+"
resources.router.routes.viewreviews.reqs.title = "reviews"
Bây giờ nếu tôi nhập URL http://www.example.com/reviews/19
, sau đó hành động xem xét được gọi. Có thể - để kiểm tra xem tiêu đề có chứa từ "đánh giá" không - thì tuyến đường này có nên được gọi không?
Trở lại với lộ trình làm việc trước đây của tôi cho http://www.example.com/java-training/19
:
resources.router.routes.viewbatchcourse.route = "/:title/:course_id/"
resources.router.routes.viewbatchcourse.defaults.controller = course
resources.router.routes.viewbatchcourse.defaults.action = view-batch
resources.router.routes.viewbatchcourse.reqs.course_id = "\d+"
Số 19
là id nhiên, mà tôi cần trong hành động để kéo các chi tiết từ cơ sở dữ liệu.
Nhưng khi trang được hiển thị, tôi không muốn hiển thị số 19.
Tôi chỉ muốn URL là http://www.example.com/java-training
Điều này có khả thi không?
Hey Jeremy - mã hóa cứng không phải là một lựa chọn vì "java-reviews" là cho một khóa học java - sẽ có 10 trang khác cho các khóa học khác như "php-reviews" - "python-reviews" v.v. lý do tại sao tôi đang tìm kiếm một regex mà chỉ cần tìm các đánh giá từ trong URL - Cảm ơn – Gublooo
Tùy chọn của bạn vẫn còn mã hóa cứng - nhưng bạn chỉ cần cứng mã kết thúc. 'route = /: title-reviews /: course_id' và' route = /: title-training /: course_id'. –