From 6780b24e59c28712a782d3393c659abbbb052dcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sessing=C3=B8?= Date: Sat, 4 Jun 2016 15:12:04 +0200 Subject: [PATCH] Development - Optimized the way parameters are parsed as a result, simple-router now supports routes like `/{param1}-{param2}.json`. - Replaced reg-ex for parameter-matching with `\w` which means that default parameter matching on routes now include `_` (underscore) per default. - Simplified `MiddlewareTest` class. --- src/Pecee/SimpleRouter/RouterBase.php | 8 ++++++++ src/Pecee/SimpleRouter/RouterEntry.php | 6 +++--- test/MiddlewareTest.php | 9 ++++----- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/Pecee/SimpleRouter/RouterBase.php b/src/Pecee/SimpleRouter/RouterBase.php index 10f782b..46b80cb 100644 --- a/src/Pecee/SimpleRouter/RouterBase.php +++ b/src/Pecee/SimpleRouter/RouterBase.php @@ -131,6 +131,14 @@ class RouterBase { // Loop through each route-request $this->processRoutes($this->routes); + // Make sure routes with longer urls are rendered first + usort($this->controllerUrlMap, function($a, $b) { + if(strlen($a->getUrl()) < strlen($b->getUrl())) { + return 1; + } + return -1; + }); + $routeNotAllowed = false; $max = count($this->controllerUrlMap); diff --git a/src/Pecee/SimpleRouter/RouterEntry.php b/src/Pecee/SimpleRouter/RouterEntry.php index bb6b598..8e36a46 100644 --- a/src/Pecee/SimpleRouter/RouterEntry.php +++ b/src/Pecee/SimpleRouter/RouterEntry.php @@ -249,7 +249,7 @@ abstract class RouterEntry { return new $name(); } - protected function parseParameters($route, $url, $parameterRegex = '[a-z0-9]+') { + protected function parseParameters($route, $url, $parameterRegex = '[\w]+') { $parameterNames = array(); $regex = ''; $lastCharacter = ''; @@ -288,7 +288,7 @@ abstract class RouterEntry { $regex .= '(?:\\/?(?P<'.$parameter.'>[^\/]+)?\\/?)'; $required = false; } else { - $regex .= '\\/(?P<' . $parameter . '>'. $parameterRegex .')\\/'; + $regex .= '.*?(?P<' . $parameter . '>'. $parameterRegex .').*?'; } $parameterNames[] = array('name' => $parameter, 'required' => $required); $parameter = ''; @@ -307,7 +307,7 @@ abstract class RouterEntry { $parameterValues = array(); - if(preg_match('/^'.$regex.'$/is', $url, $parameterValues)) { + if(preg_match('/^'.$regex.'.?$/is', $url, $parameterValues)) { $parameters = array(); $max = count($parameterNames); diff --git a/test/MiddlewareTest.php b/test/MiddlewareTest.php index 129df6d..e0c44ba 100644 --- a/test/MiddlewareTest.php +++ b/test/MiddlewareTest.php @@ -20,17 +20,16 @@ class MiddlewareTest extends PHPUnit_Framework_TestCase { \Pecee\SimpleRouter\SimpleRouter::get('/my/test/url', 'DummyController@start', ['middleware' => 'DummyMiddleware']); + $found = false; + try { \Pecee\SimpleRouter\SimpleRouter::start(); }catch(Exception $e) { - $this->assertTrue(($e instanceof MiddlewareLoadedException)); - return; + $found = ($e instanceof MiddlewareLoadedException); } - throw new Exception('Middleware not loaded'); + $this->assertTrue($found); } - - } \ No newline at end of file