Ich habe zwei Probleme mit benutzerfreundlichen URLs.Zend Framework - Einrichten von benutzerfreundlichen URLs mit Routen und Regex
Ich habe einen Router wie folgt festgelegt:
- Die tatsächliche URL
http://www.example.com/course/view-batch/course_id/19
- ist ich eine freundlichere URL wollen
http://www.example.com/java-training/19
Ich habe Setup die folgende Route 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+"
Dies funktioniert Perf gut.
Jetzt habe ich eine neue Seite - die
lesen für Java enthält- Die tatsächliche URL
http://www.example.com/course/view-reviews/course_id/19
- ist ich ein freundlicher URL
http://www.example.com/java-reviews/19
Ich weiß, es ist nicht möglich wollen, weil ein Die Route ist bereits so eingerichtet, dass sie diesem Format entspricht.
So dachte ich, wenn es möglich ist, Regex zu verwenden und zu überprüfen, ob Titel "Bewertungen" enthält, dann diese Route verwenden.
Ich habe diesen Ansatz versucht, aber es funktioniert nicht. Stattdessen öffnet sie den Blick Batch-Seite:
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"
Der nächstgelegene ich diese an die Arbeit bekommen haben ist
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"
Nun, wenn ich die URL http://www.example.com/reviews/19
, dann ist die Ansicht-Bewertungen Aktion aufgerufen wird, ein. Ist es möglich - zu überprüfen, ob der Titel das Wort "Bewertungen" enthält - dann sollte diese Route aufgerufen werden?
Gehen wir zurück zu meiner früheren Arbeits Route für 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+"
Die Zahl 19
ist der Kurs-ID, die ich in der Aktion müssen die Details aus der Datenbank zu ziehen.
Aber wenn die Seite angezeigt wird, möchte ich nicht die Nummer 19 sichtbar.
Ich will nur die URL http://www.example.com/java-training
Ist das möglich sein?
Hey Jeremy - harte Codierung ist keine Option, weil "java-reviews" für einen Kurs java ist - es wird 10 andere Seiten für andere Kurse wie "php-reviews" - "python-reviews" usw. geben - also das Warum suchte ich nach einer Regex, die nur nach dem Wort Bewertungen in der URL sucht - Danke – Gublooo
Ihre Option ist immer noch hart codieren - aber Sie nur hart das Ende programmieren. 'route = /: title-reviews /: course_id' und' route = /: title-training /: course_id'. –