*/ private array $configCache = []; /** * @param array $domainConfig */ public function __construct( private readonly array $domainConfig, private readonly RequestStack $requestStack, ) { } /** * Returns the configuration for the current request host. */ public function getConfig(): DomainConfig { $request = $this->requestStack->getCurrentRequest(); if (null === $request) { return DomainConfig::default(); } return $this->getConfigForHost($request->getHost()); } /** * Returns the configuration for a specific host. * * @param string $host The host to resolve configuration for */ public function getConfigForHost(string $host): DomainConfig { $host = strtolower($host); if (isset($this->configCache[$host])) { return $this->configCache[$host]; } foreach ($this->domainConfig as $pattern => $config) { $pattern = strtolower($pattern); if ($host === $pattern || str_ends_with($host, '.'.$pattern)) { $domainConfig = DomainConfig::fromArray($config); $this->configCache[$host] = $domainConfig; return $domainConfig; } } $this->configCache[$host] = DomainConfig::default(); return $this->configCache[$host]; } }