winter icon indicating copy to clipboard operation
winter copied to clipboard

Translate parameters - urlFromPattern bug

Open Jk1979 opened this issue 1 year ago • 1 comments

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 - image

but now it is like this -

image

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

image

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 -

image

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

Jk1979 avatar Apr 18 '24 10:04 Jk1979

@Jk1979 can you submit a test case for this issue in a PR?

LukeTowers avatar Apr 22 '24 18:04 LukeTowers