2012-06-17 5 views
0

Zend Route выпуск.двойная косая черта в URL-адресах.

Обычно он отлично работает.

 
http://www.example.com/course-details/1/Physics-Newtons-Law 

Но если я типа дополнительной косой черты в URL, то noauthAction моего контроллера ошибки вызывается.

Пример URL-адресов, которые не работают.

 
http://www.example.com/course-details//1/Physics-Newtons-Law 
http://www.example.com/course-details/1//Physics-Newtons-Law 

Есть ли что-то, что мне нужно для определения маршрута, чтобы разрешить дополнительные слэши?

Маршрутизация в Application.ini

 
resources.router.routes.viewcourse.route = "/course-details/:course_id/:title" 
resources.router.routes.viewcourse.defaults.controller = course 
resources.router.routes.viewcourse.defaults.action = view 
resources.router.routes.viewcourse.defaults.title = 
resources.router.routes.viewcourse.reqs.course_id = "\d+" 

ответ

2

Вы можете использовать плагин контроллера для исправления опечаток URL.

/** 
* Fix common typos in URLs before the request 
* is evaluated against the defined routes. 
*/ 
class YourNamespace_Controller_Plugin_UrlTypoFixer 
    extends Zend_Controller_Plugin_Abstract 
{ 
    public function routeStartup($request) 
    { 
     // Correct consecutive slashes in the URL. 
     $uri = $request->getRequestUri(); 
     $correctedUri = preg_replace('/\/{2,}/', '/', $uri); 
     if ($uri != $correctedUri) { 
      $request->setRequestUri($correctedUri); 
     } 
    } 
} 

А затем зарегистрируйте плагин в своем ini-файле.

resources.frontController.plugins.UrlTypoFixer = "YourNamespace_Controller_Plugin_UrlTypoFixer" 
+0

Спасибо Зак - это исправлено для меня. Я пошел по неправильному пути - я играл с правилами ReWrite для apache, чтобы удалить двойные косые черты - но это было быстро. Спасибо – Gublooo

+0

Также помните, что если вы передаете маршруты маршрутизатора через файл конфигурации в вашем boostrapper с помощью $ router-> addConfig ($ config, 'routes'); на самом деле это не добавление маршрутов уже существующих (по умолчанию), но их переопределение. Чтобы действительно добавить их, убедитесь, что вы выполняете $ router-> addDefaultRoutes(); перед выполнением addConfig – Ponsjuh