summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Middleware/RouteDispatcher.php8
-rw-r--r--tests/Unit/Middleware/RouteDispatcherTest.php8
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];
}