From f7f1f1e3def3004967c200d6b8e4712ab3bb0094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sessing=C3=B8?= Date: Wed, 19 May 2021 04:31:50 +0200 Subject: [PATCH 1/2] Fixed issue causing SimpleRouter::exception helper not to work when used within a group (issue: #551) --- src/Pecee/SimpleRouter/SimpleRouter.php | 4 +-- .../RouterCallbackExceptionHandlerTest.php | 25 ++++++++++++++++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/Pecee/SimpleRouter/SimpleRouter.php b/src/Pecee/SimpleRouter/SimpleRouter.php index 60cf12e..f3b696d 100644 --- a/src/Pecee/SimpleRouter/SimpleRouter.php +++ b/src/Pecee/SimpleRouter/SimpleRouter.php @@ -432,9 +432,7 @@ class SimpleRouter $group = new RouteGroup(); $group->addExceptionHandler($callbackHandler); - array_unshift($routes, $group); - - static::router()->setRoutes($routes); + static::router()->addRoute($group); return $callbackHandler; } diff --git a/tests/Pecee/SimpleRouter/RouterCallbackExceptionHandlerTest.php b/tests/Pecee/SimpleRouter/RouterCallbackExceptionHandlerTest.php index bf6514f..f86d121 100644 --- a/tests/Pecee/SimpleRouter/RouterCallbackExceptionHandlerTest.php +++ b/tests/Pecee/SimpleRouter/RouterCallbackExceptionHandlerTest.php @@ -19,10 +19,29 @@ class RouterCallbackExceptionHandlerTest extends \PHPUnit\Framework\TestCase throw new ExceptionHandlerException(); }); - TestRouter::debugNoReset('/404-url', 'get'); - TestRouter::router()->reset(); + TestRouter::debug('/404-url'); + } - $this->assertTrue(true); + public function testExceptionHandlerCallback() { + + TestRouter::group(['prefix' => null], function() { + TestRouter::get('/', function() { + return 'Hello world'; + }); + + TestRouter::get('/not-found', 'DummyController@method1'); + TestRouter::error(function(\Pecee\Http\Request $request, \Exception $exception) { + + if($exception instanceof \Pecee\SimpleRouter\Exceptions\NotFoundHttpException && $exception->getCode() === 404) { + return $request->setRewriteCallback(static function() { + return 'success'; + }); + } + }); + }); + + $result = TestRouter::debugOutput('/thisdoes-not/existssss', 'get'); + $this->assertEquals('success', $result); } } \ No newline at end of file From e057a761539afb951da23a0dcca442597c9c772b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sessing=C3=B8?= Date: Wed, 19 May 2021 04:41:36 +0200 Subject: [PATCH 2/2] Removed unused variable. --- src/Pecee/SimpleRouter/SimpleRouter.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Pecee/SimpleRouter/SimpleRouter.php b/src/Pecee/SimpleRouter/SimpleRouter.php index f3b696d..3f4da47 100644 --- a/src/Pecee/SimpleRouter/SimpleRouter.php +++ b/src/Pecee/SimpleRouter/SimpleRouter.php @@ -425,14 +425,11 @@ class SimpleRouter */ public static function error(Closure $callback): CallbackExceptionHandler { - $routes = static::router()->getRoutes(); - $callbackHandler = new CallbackExceptionHandler($callback); - $group = new RouteGroup(); - $group->addExceptionHandler($callbackHandler); - - static::router()->addRoute($group); + static::router()->addRoute( + (new RouteGroup())->addExceptionHandler($callbackHandler) + ); return $callbackHandler; }