diff --git a/application/forms/Navigation/NavigationItemForm.php b/application/forms/Navigation/NavigationItemForm.php index 1bd7eb97f..7d6bd97e0 100644 --- a/application/forms/Navigation/NavigationItemForm.php +++ b/application/forms/Navigation/NavigationItemForm.php @@ -97,7 +97,10 @@ class NavigationItemForm extends Form public function getValues($suppressArrayNotation = false) { $values = parent::getValues($suppressArrayNotation); - if (isset($values['url']) && $values['url']) { + // The regex here specifically matches the port-macro as it's the only one preventing Url::fromPath() from + // successfully parsing the given url. Any other macro such as for the scheme or host simply gets identified + // as path which is just fine in this case. + if (isset($values['url']) && $values['url'] && !preg_match('~://.+:(\$.+\$)~', $values['url'])) { $url = Url::fromPath($values['url']); if ($url->getBasePath() === $this->getRequest()->getBasePath()) { $values['url'] = $url->getRelativeUrl();