Ho due problemi con gli URL user-friendly.Zend Framework - impostazione di URL user-friendly con route ed espressioni regolari
Ho un router configurato come segue:
- L'URL reale è
http://www.example.com/course/view-batch/course_id/19
- voglio un URL amichevole
http://www.example.com/java-training/19
Ho installato il seguente itinerario in 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+"
Questo funziona perf molto bene.
ora ho una nuova pagina - che contiene commenti su Java
- L'URL reale è
http://www.example.com/course/view-reviews/course_id/19
- Voglio un URL amichevole
http://www.example.com/java-reviews/19
mi rendo conto suo non è possibile perché uno percorso è già configurato per abbinare quel formato.
Quindi stavo pensando se è possibile utilizzare regex e controllare se il titolo contiene "recensioni", quindi utilizzare questo percorso.
Ho provato questo approccio, ma non funziona. Invece, si apre la pagina di visualizzazione-batch:
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"
Il più vicino che ho ottenuto questo al lavoro è
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"
Ora se entro l'URL http://www.example.com/reviews/19
, allora l'azione vista-recensioni viene chiamato. E 'possibile - per verificare se il titolo contiene la parola "recensioni" - allora questa rotta dovrebbe essere invocata?
Tornando alla mia precedente percorso di lavoro per 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+"
Il numero 19
è l'ID corso, che ho bisogno nell'atto di tirare i dettagli dal database.
Ma quando viene visualizzata la pagina, non voglio che il numero 19 sia visibile.
Voglio solo l'URL per essere http://www.example.com/java-training
è possibile?
Hey Jeremy - hard coding non è un'opzione perché "java-reviews" è per un corso java - ci saranno altre 10 pagine per altri corsi come "php-reviews" - "python-reviews" ecc. perché stavo cercando una regex che cerca le recensioni di parole nell'URL - Grazie – Gublooo
L'opzione è ancora difficile da codificare - ma basta codificare il codice alla fine. 'route = /: title-reviews /: course_id' e' route = /: title-training /: course_id'. –