From c4ee1b9186de0a5eb0c2d6c7b1aaad47a1b2d80c Mon Sep 17 00:00:00 2001 From: Simon Sessingo Date: Sat, 2 Dec 2017 19:30:30 +0100 Subject: [PATCH] Optimisations --- .../Http/Middleware/BaseCsrfVerifier.php | 6 +++++ .../Http/Security/CookieTokenProvider.php | 2 +- src/Pecee/Http/Uri.php | 8 ++---- .../SimpleRouter/Route/LoadableRoute.php | 27 ++++++++++--------- src/Pecee/SimpleRouter/Route/Route.php | 17 ++++++++++-- .../SimpleRouter/Route/RouteController.php | 2 +- src/Pecee/SimpleRouter/Router.php | 19 +++++++------ src/Pecee/SimpleRouter/SimpleRouter.php | 3 +-- 8 files changed, 51 insertions(+), 33 deletions(-) diff --git a/src/Pecee/Http/Middleware/BaseCsrfVerifier.php b/src/Pecee/Http/Middleware/BaseCsrfVerifier.php index e0f166b..65d1fb0 100644 --- a/src/Pecee/Http/Middleware/BaseCsrfVerifier.php +++ b/src/Pecee/Http/Middleware/BaseCsrfVerifier.php @@ -52,6 +52,12 @@ class BaseCsrfVerifier implements IMiddleware return false; } + /** + * Handle request + * + * @param Request $request + * @throws TokenMismatchException + */ public function handle(Request $request) { diff --git a/src/Pecee/Http/Security/CookieTokenProvider.php b/src/Pecee/Http/Security/CookieTokenProvider.php index c8e0115..2a85ed1 100644 --- a/src/Pecee/Http/Security/CookieTokenProvider.php +++ b/src/Pecee/Http/Security/CookieTokenProvider.php @@ -21,7 +21,7 @@ class CookieTokenProvider implements ITokenProvider /** * Generate random identifier for CSRF token * - * @throws \RuntimeException + * @throws \RuntimeException|\Exception * @return string */ public function generateToken() diff --git a/src/Pecee/Http/Uri.php b/src/Pecee/Http/Uri.php index 0eb957e..03e99f4 100644 --- a/src/Pecee/Http/Uri.php +++ b/src/Pecee/Http/Uri.php @@ -135,7 +135,7 @@ class Uri public function parseUrl($url, $component = -1) { $encodedUrl = preg_replace_callback( - '%[^:/@?&=#]+%u', + '/[^:\/@?&=#]+/u', function ($matches) { return urlencode($matches[0]); }, @@ -148,11 +148,7 @@ class Uri throw new \InvalidArgumentException('Malformed URL: ' . $url); } - foreach ((array)$parts as $name => $value) { - $parts[$name] = urldecode($value); - } - - return $parts; + return array_map('urldecode', $parts); } /** diff --git a/src/Pecee/SimpleRouter/Route/LoadableRoute.php b/src/Pecee/SimpleRouter/Route/LoadableRoute.php index fa98eb4..611bed2 100644 --- a/src/Pecee/SimpleRouter/Route/LoadableRoute.php +++ b/src/Pecee/SimpleRouter/Route/LoadableRoute.php @@ -30,22 +30,23 @@ abstract class LoadableRoute extends Route implements ILoadableRoute { $max = count($this->getMiddlewares()); - if ($max !== 0) { + if ($max === 0) { + return; + } - for ($i = 0; $i < $max; $i++) { + for ($i = 0; $i < $max; $i++) { - $middleware = $this->getMiddlewares()[$i]; + $middleware = $this->getMiddlewares()[$i]; - if (is_object($middleware) === false) { - $middleware = $this->loadClass($middleware); - } - - if (($middleware instanceof IMiddleware) === false) { - throw new HttpException($middleware . ' must be inherit the IMiddleware interface'); - } - - $middleware->handle($request); + if (is_object($middleware) === false) { + $middleware = $this->loadClass($middleware); } + + if (($middleware instanceof IMiddleware) === false) { + throw new HttpException($middleware . ' must be inherit the IMiddleware interface'); + } + + $middleware->handle($request); } } @@ -145,7 +146,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute } $url = '/' . ltrim($url, '/'); - $url .= join('/', $unknownParams); + $url .= implode('/', $unknownParams); return rtrim($url, '/') . '/'; } diff --git a/src/Pecee/SimpleRouter/Route/Route.php b/src/Pecee/SimpleRouter/Route/Route.php index 54e4163..e02a710 100644 --- a/src/Pecee/SimpleRouter/Route/Route.php +++ b/src/Pecee/SimpleRouter/Route/Route.php @@ -56,6 +56,12 @@ abstract class Route implements IRoute protected $originalParameters = []; protected $middlewares = []; + /** + * Load class by name + * @param string $name + * @return mixed + * @throws NotFoundHttpException + */ protected function loadClass($name) { if (class_exists($name) === false) { @@ -65,6 +71,13 @@ abstract class Route implements IRoute return new $name(); } + /** + * Render route + * + * @param Request $request + * @return string|mixed + * @throws NotFoundHttpException + */ public function renderRoute(Request $request) { $callback = $this->getCallback(); @@ -119,7 +132,7 @@ abstract class Route implements IRoute if (preg_match_all('/' . $regex . '/u', $route, $parameters) > 0) { - $urlParts = preg_split('/((\-?\/?)\{[^}]+\})/', rtrim($route, '/')); + $urlParts = preg_split('/((\-?\/?)\{[^}]+\})/', $route); foreach ($urlParts as $key => $t) { @@ -149,7 +162,7 @@ abstract class Route implements IRoute $urlParts[$key] = preg_quote($t, '/') . $regex; } - $urlRegex = join('', $urlParts); + $urlRegex = implode('', $urlParts); } else { $urlRegex = preg_quote($route, '/'); diff --git a/src/Pecee/SimpleRouter/Route/RouteController.php b/src/Pecee/SimpleRouter/Route/RouteController.php index a3be252..81a6377 100644 --- a/src/Pecee/SimpleRouter/Route/RouteController.php +++ b/src/Pecee/SimpleRouter/Route/RouteController.php @@ -81,7 +81,7 @@ class RouteController extends LoadableRoute implements IControllerRoute $url .= '//' . $group->getDomains()[0]; } - $url .= '/' . trim($this->getUrl(), '/') . '/' . strtolower($method) . join('/', $parameters); + $url .= '/' . trim($this->getUrl(), '/') . '/' . strtolower($method) . implode('/', $parameters); return '/' . trim($url, '/') . '/'; } diff --git a/src/Pecee/SimpleRouter/Router.php b/src/Pecee/SimpleRouter/Router.php index cd9aaeb..50a506e 100644 --- a/src/Pecee/SimpleRouter/Router.php +++ b/src/Pecee/SimpleRouter/Router.php @@ -125,7 +125,6 @@ class Router $url = ($this->request->getRewriteUrl() !== null) ? $this->request->getRewriteUrl() : $this->request->getUri()->getPath(); - /* @var $route IRoute */ for ($i = $max; $i >= 0; $i--) { $route = $routes[$i]; @@ -218,6 +217,14 @@ class Router $this->processRoutes($this->routes); } + /** + * Routes the request + * + * @param bool $rewrite + * @return string|mixed + * @throws HttpException + * @throws \Exception + */ public function routeRequest($rewrite = false) { $routeNotAllowed = false; @@ -315,12 +322,8 @@ class Router { $url = ($this->request->getRewriteUrl() !== null) ? $this->request->getRewriteUrl() : $this->request->getUri()->getPath(); - $max = count($this->exceptionHandlers); - /* @var $handler IExceptionHandler */ - for ($i = 0; $i < $max; $i++) { - - $handler = $this->exceptionHandlers[$i]; + foreach ($this->exceptionHandlers as $key => $handler) { if (is_object($handler) === false) { $handler = new $handler(); @@ -346,7 +349,7 @@ class Router /* If the request has changed */ if ($rewriteUrl !== null && $rewriteUrl !== $url) { - unset($this->exceptionHandlers[$i]); + unset($this->exceptionHandlers[$key]); $this->exceptionHandlers = array_values($this->exceptionHandlers); return $this->routeRequest(true); @@ -510,7 +513,7 @@ class Router } /* No result so we assume that someone is using a hardcoded url and join everything together. */ - $url = trim(join('/', array_merge((array)$name, (array)$parameters)), '/'); + $url = trim(implode('/', array_merge((array)$name, (array)$parameters)), '/'); return (($url === '') ? '/' : '/' . $url . '/') . $this->arrayToParams($getParams); } diff --git a/src/Pecee/SimpleRouter/SimpleRouter.php b/src/Pecee/SimpleRouter/SimpleRouter.php index 5b9e287..b02310e 100644 --- a/src/Pecee/SimpleRouter/SimpleRouter.php +++ b/src/Pecee/SimpleRouter/SimpleRouter.php @@ -45,8 +45,7 @@ class SimpleRouter /** * Start/route request * - * @throws HttpException - * @throws NotFoundHttpException + * @throws HttpException|NotFoundHttpException|\Exception */ public static function start() {