wintercms / winter

Free, open-source, self-hosted CMS platform based on the Laravel PHP Framework.
https://wintercms.com
MIT License
1.36k stars 192 forks source link

Translate parameters - urlFromPattern bug #1104

Open Jk1979 opened 5 months ago

Jk1979 commented 5 months ago

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

LukeTowers commented 5 months ago

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