diff --git a/VERSION b/VERSION index 6cefb80..b94e91a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.2403.301624 +0.2404.21726 diff --git a/src/Http/Routing/HttpRouter.php b/src/Http/Routing/HttpRouter.php index 0d4e084..9fe7115 100644 --- a/src/Http/Routing/HttpRouter.php +++ b/src/Http/Routing/HttpRouter.php @@ -1,7 +1,7 @@ staticRoutes)) { - $methods = $this->staticRoutes[$path]; + foreach($this->staticRoutes[$path] as $sMethodName => $sMethodHandler) + $methods[$sMethodName] = [$sMethodHandler, []]; } else { foreach($this->dynamicRoutes as $rPattern => $rMethods) - if(preg_match($rPattern, $path, $args) === 1) { - $methods = $rMethods; - array_shift($args); - break; - } + if(preg_match($rPattern, $path, $args) === 1) + foreach($rMethods as $rMethodName => $rMethodHandler) + if(!array_key_exists($rMethodName, $methods)) + $methods[$rMethodName] = [$rMethodHandler, array_slice($args, 1)]; } $method = strtoupper($method); - if(array_key_exists($method, $methods)) - $handler = $methods[$method]; - elseif($method === 'HEAD' && array_key_exists('GET', $methods)) - $handler = $methods['GET']; + if(array_key_exists($method, $methods)) { + [$handler, $args] = $methods[$method]; + } elseif($method === 'HEAD' && array_key_exists('GET', $methods)) { + [$handler, $args] = $methods['GET']; + } else { + $handler = null; + $args = []; + } return new ResolvedRouteInfo($middlewares, array_keys($methods), $handler, $args); } diff --git a/tests/RouterTest.php b/tests/RouterTest.php index d367efc..63a1590 100644 --- a/tests/RouterTest.php +++ b/tests/RouterTest.php @@ -1,7 +1,7 @@ assertEquals('meow', $router->resolve('GET', '/scoped/meow')->dispatch([])); $this->assertEquals('meow', $scoped->resolve('POST', '/meow')->dispatch([])); } + + public function testEEPROMSituation(): void { + $router = new HttpRouter; + + $router->options('/uploads/([A-Za-z0-9\-_]+)(?:\.(t|json))?', function() {}); + $router->get('/uploads/([A-Za-z0-9\-_]+)(?:\.(t|json))?', function() {}); + $router->delete('/uploads/([A-Za-z0-9\-_]+)', function() {}); + + $resolved = $router->resolve('DELETE', '/uploads/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); + + $this->assertEquals(['OPTIONS', 'GET', 'DELETE'], $resolved->getSupportedMethods()); + } }