*/ class UrlBuilder { public function __construct( protected UrlGeneratorInterface $urlGenerator, protected SiteRequest $siteRequest ) { } public function replaceTags(string $value): string { preg_match_all( '#\{\{\s*url://(?P[a-z0-9_]+)(\?(?P.*))?\s*\}\}#isU', $value, $match, PREG_SET_ORDER ); $domain = $this->siteRequest->getDomain(); foreach ($match as $block) { $url = null; try { $block['params'] = $block['params'] ?? ''; $block['params'] = str_replace(['&', ' '], ['&', '%20'], $block['params']); $route = $block['route']; parse_str($block['params'], $params); if (!isset($params['_domain'])) { $params['_domain'] = $domain; } $url = $this->urlGenerator->generate($route, $params, UrlGeneratorInterface::ABSOLUTE_URL); parse_str(parse_url($url)['query'] ?? '', $infos); if (isset($infos['_domain'])) { unset($params['_domain']); $url = $this->urlGenerator->generate($route, $params, UrlGeneratorInterface::ABSOLUTE_URL); } } catch (\Exception $e) { } $value = str_replace($block[0], $url, $value); } return $value; } }