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] 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