From aa2124f655788dea3f15c3040f3201f2b64e14b0 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Wed, 26 Sep 2018 20:49:31 +0200 Subject: RouteDispatcher: Allow installation into sub directory --- src/Middleware/RouteDispatcher.php | 8 +++++++- tests/Unit/Middleware/RouteDispatcherTest.php | 8 ++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Middleware/RouteDispatcher.php b/src/Middleware/RouteDispatcher.php index f14faea8..24a7906d 100644 --- a/src/Middleware/RouteDispatcher.php +++ b/src/Middleware/RouteDispatcher.php @@ -2,6 +2,7 @@ namespace Engelsystem\Middleware; +use Engelsystem\Http\Request; use FastRoute\Dispatcher as FastRouteDispatcher; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -44,7 +45,12 @@ class RouteDispatcher implements MiddlewareInterface */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { - $route = $this->dispatcher->dispatch($request->getMethod(), urldecode($request->getUri()->getPath())); + $path = $request->getUri()->getPath(); + if ($request instanceof Request) { + $path = $request->getPathInfo(); + } + + $route = $this->dispatcher->dispatch($request->getMethod(), urldecode($path)); $status = $route[0]; if ($status == FastRouteDispatcher::NOT_FOUND) { diff --git a/tests/Unit/Middleware/RouteDispatcherTest.php b/tests/Unit/Middleware/RouteDispatcherTest.php index 1e920f06..611d3b7c 100644 --- a/tests/Unit/Middleware/RouteDispatcherTest.php +++ b/tests/Unit/Middleware/RouteDispatcherTest.php @@ -2,6 +2,7 @@ namespace Engelsystem\Test\Unit\Middleware; +use Engelsystem\Http\Request; use Engelsystem\Middleware\RouteDispatcher; use FastRoute\Dispatcher as FastRouteDispatcher; use PHPUnit\Framework\MockObject\MockObject; @@ -127,7 +128,7 @@ class RouteDispatcherTest extends TestCase /** @var ResponseInterface|MockObject $response */ $response = $this->getMockForAbstractClass(ResponseInterface::class); /** @var ServerRequestInterface|MockObject $request */ - $request = $this->getMockForAbstractClass(ServerRequestInterface::class); + $request = $this->createMock(Request::class); /** @var RequestHandlerInterface|MockObject $handler */ $handler = $this->getMockForAbstractClass(RequestHandlerInterface::class); /** @var UriInterface|MockObject $uriInterface */ @@ -139,9 +140,12 @@ class RouteDispatcherTest extends TestCase $request->expects($this->atLeastOnce()) ->method('getUri') ->willReturn($uriInterface); + $request->expects($this->atLeastOnce()) + ->method('getPathInfo') + ->willReturn('/foo%21bar'); $uriInterface->expects($this->atLeastOnce()) ->method('getPath') - ->willReturn('/foo%21bar'); + ->willReturn('/lorem/foo%21bar'); return [$dispatcher, $response, $request, $handler]; } -- cgit v1.2.3-54-g00ecf