From 21dbeed097db99364db10da8fde60cb18f607669 Mon Sep 17 00:00:00 2001 From: Marc TEYSSIER Date: Wed, 2 Nov 2016 14:12:22 +0100 Subject: [PATCH] Fix emoji route ! --- README.md | 2 +- .../Splash/Routers/SplashDefaultRouter.php | 2 +- .../Mvc/Splash/Fixtures/TestController3.php | 27 +++++++++++++++++++ .../Routers/SplashDefaultRouterTest.php | 22 +++++++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 tests/Mouf/Mvc/Splash/Fixtures/TestController3.php diff --git a/README.md b/README.md index 04d49a7..4570c38 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Splash is a PHP router. It takes an HTTP request and dispatches it to the approp - With [Wordpress (through Moufpress, a plugin that adds a Splash-compatible MVC framework)](http://mouf-php.com/packages/mouf/integration.wordpress.moufpress), - With [Joomla (through Moufla, a plugin that adds a Splash-compatible MVC framework)](http://mouf-php.com/packages/mouf/integration.wordpress.moufpress), - With [Magento (through Moufgento, a plugin that adds a Splash-compatible MVC framework)](http://mouf-php.com/packages/mouf/integration.magento.moufgento), - +- And it supports emoji routes (mydomain.com/😍) Clean controllers diff --git a/src/Mouf/Mvc/Splash/Routers/SplashDefaultRouter.php b/src/Mouf/Mvc/Splash/Routers/SplashDefaultRouter.php index 84caad6..08acda5 100644 --- a/src/Mouf/Mvc/Splash/Routers/SplashDefaultRouter.php +++ b/src/Mouf/Mvc/Splash/Routers/SplashDefaultRouter.php @@ -238,7 +238,7 @@ private function route(ServerRequestInterface $request, ResponseInterface $respo } $tailing_url = substr($request_path, $pos + strlen($this->rootUrl)); - + $tailing_url = urldecode($tailing_url); $splashRoute = $urlNodes->walk($tailing_url, $request); if ($splashRoute === null) { diff --git a/tests/Mouf/Mvc/Splash/Fixtures/TestController3.php b/tests/Mouf/Mvc/Splash/Fixtures/TestController3.php new file mode 100644 index 0000000..56555f5 --- /dev/null +++ b/tests/Mouf/Mvc/Splash/Fixtures/TestController3.php @@ -0,0 +1,27 @@ + 'success' + ]); + } +} diff --git a/tests/Mouf/Mvc/Splash/Routers/SplashDefaultRouterTest.php b/tests/Mouf/Mvc/Splash/Routers/SplashDefaultRouterTest.php index ab9a26e..bc87707 100644 --- a/tests/Mouf/Mvc/Splash/Routers/SplashDefaultRouterTest.php +++ b/tests/Mouf/Mvc/Splash/Routers/SplashDefaultRouterTest.php @@ -21,6 +21,7 @@ use Zend\Diactoros\Response\JsonResponse; use Zend\Diactoros\Response\RedirectResponse; use Zend\Diactoros\ServerRequest; +use Mouf\Mvc\Splash\Fixtures\TestController3; class SplashDefaultRouterTest extends \PHPUnit_Framework_TestCase { @@ -100,6 +101,27 @@ public function testUnknownRoute() $response = $defaultRouter($request, $response); } + + public function testEmojiRoute() + { + $container = new Picotainer([ + 'controller' => function () { + return new TestController3(); + }, + ]); + $parameterFetcherRegistry = ParameterFetcherRegistry::buildDefaultControllerRegistry(); + $controllerAnalyzer = new ControllerAnalyzer($container, $parameterFetcherRegistry, new AnnotationReader()); + $controllerRegistry = new ControllerRegistry($controllerAnalyzer, ['controller']); + $defaultRouter = new SplashDefaultRouter($container, [ + $controllerRegistry, + ], $parameterFetcherRegistry); + + $request = new ServerRequest([], [], '/'.urlencode('🍕'), 'GET'); + $response = new HtmlResponse(''); + $response = $defaultRouter($request, $response); + $this->assertInstanceOf(JsonResponse::class, $response); + } + public function testUnknownRouteWith404Handler() { $container = new Picotainer([