mirror of
https://github.com/skipperbent/simple-php-router.git
synced 2026-06-17 08:47:52 +00:00
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user