diff --git a/core/EventSuscriber/Site/NodeEventSubscriber.php b/core/EventSuscriber/Site/NodeEventSubscriber.php index cd1e252..39128d5 100644 --- a/core/EventSuscriber/Site/NodeEventSubscriber.php +++ b/core/EventSuscriber/Site/NodeEventSubscriber.php @@ -83,11 +83,13 @@ class NodeEventSubscriber extends EntityManagerEventSubscriber } $parameters = $node->getParameters(); + $routeParameters = []; foreach ($parameters as $key => $parameter) { $parameter['name'] = $this->routeParameterSlugify->slugify($parameter['name']); $routeParameter = sprintf('{%s}', $parameter['name']); $regex = '/'.preg_quote($routeParameter).'/'; + $routeParameters[] = $parameter['name']; if (!preg_match($regex, $generatedUrl)) { $generatedUrl .= '/'.$routeParameter; @@ -96,6 +98,20 @@ class NodeEventSubscriber extends EntityManagerEventSubscriber $parameters[$key] = $parameter; } + preg_match_all('/\{(.*)\}/isU', $generatedUrl, $matches, PREG_SET_ORDER); + + foreach ($matches as $match) { + if (!in_array($match[1], $routeParameters)) { + $parameters[] = [ + 'name' => $this->routeParameterSlugify->slugify($match[1]), + 'defaultValue' => null, + 'requirement' => null, + ]; + } + } + + $generatedUrl = str_replace('//', '/', $generatedUrl); + $node->setParameters($parameters); $attributes = $node->getAttributes();