From c59ab12e1a781c0366ed993904ad4c5cfb7313e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sessing=C3=B8?= Date: Thu, 17 Nov 2016 05:36:44 +0100 Subject: [PATCH] Bugfixes --- src/Pecee/SimpleRouter/RouterBase.php | 15 +++++++-------- src/Pecee/SimpleRouter/RouterEntry.php | 24 ++++++++---------------- src/Pecee/SimpleRouter/RouterGroup.php | 7 +++---- test/RouterRouteTest.php | 2 +- 4 files changed, 19 insertions(+), 29 deletions(-) diff --git a/src/Pecee/SimpleRouter/RouterBase.php b/src/Pecee/SimpleRouter/RouterBase.php index 453d3bc..49d1de4 100644 --- a/src/Pecee/SimpleRouter/RouterBase.php +++ b/src/Pecee/SimpleRouter/RouterBase.php @@ -85,7 +85,6 @@ class RouterBase { protected $routeChanges = array(); public function __construct() { - $this->reset(); } @@ -118,16 +117,12 @@ class RouterBase { protected function processRoutes(array $routes, array $settings = array(), array $prefixes = array(), RouterEntry $parent = null) { // Loop through each route-request - $mergedSettings = array(); - /* @var $route RouterEntry */ for($i = 0; $i < count($routes); $i++) { $route = $routes[$i]; - if(count($settings)) { - $route->setData($settings); - } + $route->setData($settings); if($parent !== null) { @@ -150,22 +145,26 @@ class RouterBase { } if($route instanceof ILoadableRoute) { + $route->setUrl( trim(join('/', $prefixes) . $route->getUrl(), '/') ); $this->controllerUrlMap[] = $route; } elseif($route instanceof RouterGroup) { + if ($route->getCallback() !== null && is_callable($route->getCallback())) { $this->processingRoute = true; $route->renderRoute($this->request); $this->processingRoute = false; if ($route->matchRoute($this->request)) { - $mergedSettings = array_merge($settings, $route->getMergeableData()); + + $settings = array_merge($settings, $route->getMergeableData()); // Add ExceptionHandler if (count($route->getExceptionHandlers())) { $this->exceptionHandlers = array_merge($this->exceptionHandlers, $route->getExceptionHandlers()); } } + } } @@ -174,7 +173,7 @@ class RouterBase { $this->backStack = array(); // Route any routes added to the backstack - $this->processRoutes($backStack, $mergedSettings, $prefixes, $route); + $this->processRoutes($backStack, $settings, $prefixes, $route); } $prefixes = []; diff --git a/src/Pecee/SimpleRouter/RouterEntry.php b/src/Pecee/SimpleRouter/RouterEntry.php index 40b8570..0b097b4 100644 --- a/src/Pecee/SimpleRouter/RouterEntry.php +++ b/src/Pecee/SimpleRouter/RouterEntry.php @@ -329,9 +329,11 @@ abstract class RouterEntry { */ public function getMergeableData() { - $output = [ - 'namespace' => $this->namespace, - ]; + $output = array(); + + if($this->namespace !== null) { + $output['namespace'] = $this->namespace; + } if(count($this->middlewares)) { $output['middleware'] = $this->middlewares; @@ -360,27 +362,17 @@ abstract class RouterEntry { */ public function setData(array $settings) { - if (isset($settings['namespace'])) { + if (isset($settings['namespace']) && $this->namespace === null) { $this->setNamespace($settings['namespace']); } // Push middleware if multiple if (isset($settings['middleware'])) { - - if (!is_array($settings['middleware'])) { - $settings['middleware'] = array_merge($this->middlewares, array($settings['middleware'])); - } else { - $settings['middleware'][] = $this->middlewares; - } - - $middlewares = is_array($settings['middleware']) ? $settings['middleware'] : array($settings['middleware']); - $this->middlewares = array_reverse(array_merge($this->middlewares, $middlewares)); - + $this->middlewares = array_merge((array)$settings['middleware'], $this->middlewares); } if(isset($settings['method'])) { - $requestMethods = is_array($settings['method']) ? $settings['method'] : array($settings['method']); - $this->setRequestMethods($requestMethods); + $this->setRequestMethods((array)$settings['method']); } if(isset($settings['where'])) { diff --git a/src/Pecee/SimpleRouter/RouterGroup.php b/src/Pecee/SimpleRouter/RouterGroup.php index 50a385d..a352ac4 100644 --- a/src/Pecee/SimpleRouter/RouterGroup.php +++ b/src/Pecee/SimpleRouter/RouterGroup.php @@ -79,16 +79,15 @@ class RouterGroup extends RouterEntry { } if(isset($settings['exceptionHandler'])) { - $handlers = is_array($settings['exceptionHandler']) ? $settings['exceptionHandler'] : array($settings['exceptionHandler']); - $this->setExceptionHandlers($handlers); + $this->setExceptionHandlers((array)$settings['exceptionHandler']); } if(isset($settings['domain'])) { - $domains = is_array($settings['domain']) ? $settings['domain'] : array($settings['domain']); - $this->setDomains($domains); + $this->setDomains((array)$settings['domain']); } return parent::setData($settings); + } } \ No newline at end of file diff --git a/test/RouterRouteTest.php b/test/RouterRouteTest.php index a8dbf96..3bfd9cc 100644 --- a/test/RouterRouteTest.php +++ b/test/RouterRouteTest.php @@ -124,7 +124,7 @@ class RouterRouteTest extends PHPUnit_Framework_TestCase { $this->result = false; \Pecee\SimpleRouter\SimpleRouter::group(['domain' => '{subdomain}.world.com'], function() { - \Pecee\SimpleRouter\SimpleRouter::get('test', function($subdomain) { + \Pecee\SimpleRouter\SimpleRouter::get('test', function($subdomain = null) { $this->result = ($subdomain === 'hello'); }); });