diff --git a/CHANGELOG.md b/CHANGELOG.md index 6159fd543..aaad9ca72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * Improved Flex FolderStorage class to better hide storage specific logic 1. [](#bugfix) * Fixed error when activating Flex Accounts in GRAV system configuration (PHP 7.1) + * Fixed Grav parameter handling in `RouteFactory::createFromString()` # v1.7.0-beta.8 ## 09/19/2019 diff --git a/system/src/Grav/Framework/Route/RouteFactory.php b/system/src/Grav/Framework/Route/RouteFactory.php index ea1cd93f9..50a9b720d 100644 --- a/system/src/Grav/Framework/Route/RouteFactory.php +++ b/system/src/Grav/Framework/Route/RouteFactory.php @@ -43,8 +43,8 @@ class RouteFactory 'grav' => [ 'root' => self::$root, 'language' => self::$language, - 'route' => $path, - 'params' => '' + 'route' => static::trimParams($path), + 'params' => static::getParams($path) ], ]; return new Route($parts); @@ -132,6 +132,26 @@ class RouteFactory return $params !== '' ? static::parseParams($params) : []; } + public static function trimParams($str) + { + if ($str === '') { + return $str; + } + + $delimiter = self::$delimiter; + + /** @var array $params */ + $params = explode('/', $str); + $list = []; + foreach ($params as $param) { + if (mb_strpos($param, $delimiter) === false) { + $list[] = $param; + } + } + + return implode('/', $list); + } + /** * @param string $str * @return array @@ -146,16 +166,17 @@ class RouteFactory /** @var array $params */ $params = explode('/', $str); + $list = []; foreach ($params as &$param) { /** @var array $parts */ $parts = explode($delimiter, $param, 2); if (isset($parts[1])) { $var = rawurldecode($parts[0]); $val = rawurldecode($parts[1]); - $param = [$var => $val]; + $list[$var] = $val; } } - return $params; + return $list; } }