From c94523740b0659bba4159050ab0c5f122b8b3b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sessing=C3=B8?= Date: Thu, 17 Nov 2016 16:24:24 +0100 Subject: [PATCH] Development - Fixed ExceptionHandlers loading in reverse order. - Fixed rewrite when modifying `Request` didn't work properly. --- .../app/Middlewares/ApiVerification.php | 4 ++- src/Pecee/SimpleRouter/RouterBase.php | 34 +++++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/demo-project/app/Middlewares/ApiVerification.php b/demo-project/app/Middlewares/ApiVerification.php index e97f0f2..b73a8a0 100644 --- a/demo-project/app/Middlewares/ApiVerification.php +++ b/demo-project/app/Middlewares/ApiVerification.php @@ -7,11 +7,13 @@ use Pecee\SimpleRouter\RouterEntry; class ApiVerification implements IMiddleware { - public function handle(Request $request, RouterEntry &$route = null) { + public function handle(Request $request, RouterEntry &$route) { // Do authentication $request->authenticated = true; + return $request; + } } \ No newline at end of file diff --git a/src/Pecee/SimpleRouter/RouterBase.php b/src/Pecee/SimpleRouter/RouterBase.php index 1f9d8aa..82bee7a 100644 --- a/src/Pecee/SimpleRouter/RouterBase.php +++ b/src/Pecee/SimpleRouter/RouterBase.php @@ -82,7 +82,9 @@ class RouterBase { * List over route changes (to avoid endless-looping) * @var array */ - protected $routeChanges = array(); + protected $routeRewrites = array(); + + protected $originalUrl; public function __construct() { $this->reset(); @@ -161,7 +163,7 @@ class RouterBase { // Add ExceptionHandler if (count($route->getExceptionHandlers())) { - $this->exceptionHandlers = array_merge($this->exceptionHandlers, $route->getExceptionHandlers()); + $this->exceptionHandlers = array_merge($route->getExceptionHandlers(), $this->exceptionHandlers); } } @@ -180,7 +182,7 @@ class RouterBase { } } - public function routeRequest(Request $newRequest = null) { + public function routeRequest($rewrite = false) { $this->loadedRoute = null; $routeNotAllowed = false; @@ -199,7 +201,7 @@ class RouterBase { } } - if($newRequest === null) { + if($rewrite === false) { // Loop through each route-request $this->processRoutes($this->routes); @@ -209,6 +211,8 @@ class RouterBase { // Verify csrf token for request $this->csrfVerifier->handle($this->request); } + + $this->originalUrl = $this->request->getUri(); } /* @var $route RouterEntry */ @@ -218,23 +222,22 @@ class RouterBase { if ($route->matchRoute($this->request)) { - if (count($route->getRequestMethods()) && !in_array($this->request->getMethod(), $route->getRequestMethods())) { + if (!in_array($this->request->getMethod(), $route->getRequestMethods())) { $routeNotAllowed = true; continue; } - $routeNotAllowed = false; - $this->loadedRoute = $route; + $this->loadedRoute->loadMiddleware($this->request, $this->loadedRoute); - $request = $this->loadedRoute->loadMiddleware($this->request, $this->loadedRoute); - - if($request !== null && $request->getUri() !== $this->request->getUri() && !in_array($request->getUri(), $this->routeChanges)) { - $this->routeChanges[] = $request->getUri(); - $this->routeRequest($request); + if($this->request->getUri() !== $this->originalUrl && !in_array($this->request->getUri(), $this->routeRewrites)) { + $this->routeRewrites[] = $this->request->getUri(); + $this->routeRequest(true); return; } + $routeNotAllowed = false; + $this->request->setUri($this->originalUrl); $this->loadedRoute->renderRoute($this->request); break; @@ -266,9 +269,10 @@ class RouterBase { $request = $handler->handleError($this->request, $this->loadedRoute, $e); - if($request !== null && !in_array($request->getUri(), $this->routeChanges)) { - $this->routeChanges[] = $request->getUri(); - $this->routeRequest($request); + if($request !== null && $request->getUri() !== $this->originalUrl && !in_array($request->getUri(), $this->routeRewrites)) { + $this->routeRewrites[] = $request->getUri(); + $this->routeRequest(true); + return; } }