I think we have wrong behaviour in winter/storm/src/Router/Helper.php getParameterName function.
In old october cms version (1.x) this function looked like this -
but then in function urlFromPattern in Router.php we have following situation -
here
for parameter "region?", function Helper::getParameterName returns "region", instead of "region?" like it was in previous version (see above) , this is due to this condition -
and then, in this condition -
$parameterExists = array_key_exists($paramName, $parameters) &&
we have false, because "region" key does not exist in params array, and we have wrong url like -
"some/destinations"
instead of
"some/destinations/central-america/belize"
In order to solve this, I had to remove "?" from params keys, before passing it to urlFromPattern($pattern, $parameters = [])
Winter CMS Build
dev-develop
PHP Version
8.1
Database engine
MySQL/MariaDB
Plugins installed
No response
Issue description
I think we have wrong behaviour in winter/storm/src/Router/Helper.php getParameterName function. In old october cms version (1.x) this function looked like this -
but now it is like this -
and if we have url pattern like this -
url = "/some/:dest|^destinations$|^world$|^countries$/:region?*"
when we run $this->getRouter()->getParameters(); for url "some/destinations/central-america/belize/" we get such array -
array:2 [ "dest" => "destinations" "region?" => "central-america/belize" ]
but then in function urlFromPattern in Router.php we have following situation -
here
for parameter "region?", function Helper::getParameterName returns "region", instead of "region?" like it was in previous version (see above) , this is due to this condition -
and then, in this condition - $parameterExists = array_key_exists($paramName, $parameters) &&
we have false, because "region" key does not exist in params array, and we have wrong url like - "some/destinations"
instead of
"some/destinations/central-america/belize"
In order to solve this, I had to remove "?" from params keys, before passing it to urlFromPattern($pattern, $parameters = [])
Steps to replicate
see above
Workaround
No response