Mam dwa problemy z przyjaznymi dla użytkownika adresami URL.Zend Framework - konfigurowanie przyjaznych dla użytkownika adresów URL za pomocą tras i wyrażeń regularnych
Mam router skonfigurować w następujący sposób:
- Rzeczywisty URL
http://www.example.com/course/view-batch/course_id/19
- chcę bardziej przyjazny URL
http://www.example.com/java-training/19
mam konfigurację następujących trasach w 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+"
To działa perf ectly dobrze.
Teraz mam nową stronę - który zawiera opinie użytkowników na Java
- Rzeczywisty URL jest
http://www.example.com/course/view-reviews/course_id/19
- chcę bardziej przyjazny URL
http://www.example.com/java-reviews/19
I docenić ich nie jest możliwe, ponieważ jeden trasa jest już skonfigurowana, aby pasować do tego formatu.
Tak więc zastanawiałem się, czy można użyć wyrażenia regularnego i sprawdzić, czy tytuł zawiera "recenzje", a następnie użyć tej trasy.
Próbowałem tego podejścia, ale to nie działa. Zamiast tego otwiera stronę view-wsadowy:
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"
Najbliżej mam to do pracy jest
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"
Teraz gdybym wpisać adres URL http://www.example.com/reviews/19
, akcja view-opinie jest wywoływana. Czy to możliwe - aby sprawdzić, czy tytuł zawiera słowo "recenzje" - czy należy przywołać tę trasę?
Wracając do mojego wcześniejszego trasie pracującego dla 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+"
numer 19
jest id Oczywiście, które muszę w akcji wyciągnąć dane z bazy danych.
Ale kiedy strona jest wyświetlana, nie chcę, aby liczba 19 była widoczna.
Chcę tylko URL być http://www.example.com/java-training
Czy to możliwe?
Hey Jeremy - twarde kodowanie nie jest opcją, ponieważ "java-reviews" jest dla jednego kursu java - będzie 10 innych stron dla innych kursów, takich jak "php-reviews" - "python-reviews" itd. - więc to dlaczego szukałem regex, który po prostu szuka opinii słów w adresie URL - Dzięki – Gublooo
Twoja opcja jest nadal twardym kodowaniem - ale po prostu mocno zakodowałeś koniec. 'route = /: title-reviews /: course_id' i' route = /: title-training /: course_id'. –