From 50863478024523e3a87064242d5e4c40a5b1b0a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sessing=C3=B8?= Date: Sun, 13 Aug 2017 18:01:48 +0100 Subject: [PATCH 1/2] Bugfix: fixed using empty value in `url` still parsing current parameters. --- src/Pecee/SimpleRouter/Route/LoadableRoute.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Pecee/SimpleRouter/Route/LoadableRoute.php b/src/Pecee/SimpleRouter/Route/LoadableRoute.php index 7ea5210..8c16247 100644 --- a/src/Pecee/SimpleRouter/Route/LoadableRoute.php +++ b/src/Pecee/SimpleRouter/Route/LoadableRoute.php @@ -124,14 +124,16 @@ abstract class LoadableRoute extends Route implements ILoadableRoute for ($i = $max; $i >= 0; $i--) { $param = $keys[$i]; - if($parameters !== null) { - $parameters = (array)$parameters; - $value = array_key_exists($param, $parameters) ? $parameters[$param] : $params[$param]; - } + if ($parameters === '' || (is_array($parameters) && count($parameters) === 0)) { + $value = ''; + } else { + $p = (array)$parameters; + $value = array_key_exists($param, $p) ? $p[$param] : $params[$param]; - /* If parameter is specifically set to null - use the original-defined value */ - if ($value === null && isset($this->originalParameters[$param])) { - $value = $this->originalParameters[$param]; + /* If parameter is specifically set to null - use the original-defined value */ + if ($value === null && isset($this->originalParameters[$param])) { + $value = $this->originalParameters[$param]; + } } if (stripos($url, $param1) !== false || stripos($url, $param) !== false) { From b7f5d315445727729cb09b41a02e0c02f8784f2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sessing=C3=B8?= Date: Thu, 17 Aug 2017 23:31:27 +0100 Subject: [PATCH 2/2] Fixed double `/` when calling `findUrl` on routes with the first parameter optional. --- src/Pecee/SimpleRouter/Route/LoadableRoute.php | 1 + test/RouterUrlTest.php | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/Pecee/SimpleRouter/Route/LoadableRoute.php b/src/Pecee/SimpleRouter/Route/LoadableRoute.php index 8c16247..421f863 100644 --- a/src/Pecee/SimpleRouter/Route/LoadableRoute.php +++ b/src/Pecee/SimpleRouter/Route/LoadableRoute.php @@ -144,6 +144,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute } } + $url = '/' . ltrim($url, '/'); $url .= join('/', $unknownParams); return rtrim($url, '/') . '/'; diff --git a/test/RouterUrlTest.php b/test/RouterUrlTest.php index 7135b22..4ea583c 100644 --- a/test/RouterUrlTest.php +++ b/test/RouterUrlTest.php @@ -28,6 +28,21 @@ class RouterUrlTest extends PHPUnit_Framework_TestCase TestRouter::router()->reset(); } + public function testUnicodeCharacters() + { + // Test spanish characters + TestRouter::get('/cursos/listado/{listado?}/{category?}', 'DummyController@method1', ['defaultParameterRegex' => '[\w\p{L}\s-]+']); + TestRouter::debugNoReset('/cursos/listado/especialidad/cirugía local', 'get'); + $this->assertEquals('/cursos/listado/{listado?}/{category?}/', TestRouter::router()->getRequest()->getLoadedRoute()->getUrl()); + + // Test danish characters + TestRouter::get('/kategori/økse', 'DummyController@method1', ['defaultParameterRegex' => '[\w\ø]+']); + TestRouter::debugNoReset('/kategori/økse', 'get'); + $this->assertEquals('/kategori/økse/', TestRouter::router()->getRequest()->getLoadedRoute()->getUrl()); + + TestRouter::router()->reset(); + } + public function testOptionalParameters() { TestRouter::get('/aviso/legal', 'DummyController@method1');