Merge pull request #147 from skipperbent/v2-development

V2 development
This commit is contained in:
Simon Sessingø
2016-11-17 17:25:30 +02:00
committed by GitHub
2 changed files with 22 additions and 17 deletions
@@ -7,11 +7,13 @@ use Pecee\SimpleRouter\RouterEntry;
class ApiVerification implements IMiddleware { class ApiVerification implements IMiddleware {
public function handle(Request $request, RouterEntry &$route = null) { public function handle(Request $request, RouterEntry &$route) {
// Do authentication // Do authentication
$request->authenticated = true; $request->authenticated = true;
return $request;
} }
} }
+19 -16
View File
@@ -82,7 +82,9 @@ class RouterBase {
* List over route changes (to avoid endless-looping) * List over route changes (to avoid endless-looping)
* @var array * @var array
*/ */
protected $routeChanges = array(); protected $routeRewrites = array();
protected $originalUrl;
public function __construct() { public function __construct() {
$this->reset(); $this->reset();
@@ -161,7 +163,7 @@ class RouterBase {
// Add ExceptionHandler // Add ExceptionHandler
if (count($route->getExceptionHandlers())) { 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; $this->loadedRoute = null;
$routeNotAllowed = false; $routeNotAllowed = false;
@@ -199,7 +201,7 @@ class RouterBase {
} }
} }
if($newRequest === null) { if($rewrite === false) {
// Loop through each route-request // Loop through each route-request
$this->processRoutes($this->routes); $this->processRoutes($this->routes);
@@ -209,6 +211,8 @@ class RouterBase {
// Verify csrf token for request // Verify csrf token for request
$this->csrfVerifier->handle($this->request); $this->csrfVerifier->handle($this->request);
} }
$this->originalUrl = $this->request->getUri();
} }
/* @var $route RouterEntry */ /* @var $route RouterEntry */
@@ -218,24 +222,22 @@ class RouterBase {
if ($route->matchRoute($this->request)) { 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; $routeNotAllowed = true;
continue; continue;
} }
$routeNotAllowed = false;
$this->loadedRoute = $route; $this->loadedRoute = $route;
$this->loadedRoute->loadMiddleware($this->request, $this->loadedRoute);
$request = clone $this->request; if($this->request->getUri() !== $this->originalUrl && !in_array($this->request->getUri(), $this->routeRewrites)) {
$this->loadedRoute->loadMiddleware($request, $this->loadedRoute); $this->routeRewrites[] = $this->request->getUri();
$this->routeRequest(true);
if($request->getUri() !== $this->request->getUri() && !in_array($request->getUri(), $this->routeChanges)) {
$this->routeChanges[] = $request->getUri();
$this->routeRequest($request);
return; return;
} }
$routeNotAllowed = false;
$this->request->setUri($this->originalUrl);
$this->loadedRoute->renderRoute($this->request); $this->loadedRoute->renderRoute($this->request);
break; break;
@@ -267,9 +269,10 @@ class RouterBase {
$request = $handler->handleError($this->request, $this->loadedRoute, $e); $request = $handler->handleError($this->request, $this->loadedRoute, $e);
if($request !== null && !in_array($request->getUri(), $this->routeChanges)) { if($request !== null && $request->getUri() !== $this->originalUrl && !in_array($request->getUri(), $this->routeRewrites)) {
$this->routeChanges[] = $request->getUri(); $this->routeRewrites[] = $request->getUri();
$this->routeRequest($request); $this->routeRequest(true);
return;
} }
} }