mergeConfigFrom( base_path('config/domains.php'), 'domains' ); } /** * Bootstrap services. */ public function boot(): void { $host = Request::getHost(); // is domain_name $themeOverride = Request::get('theme'); // Allow theme override via URL parameter // Standard-Werte für Domain, die nicht in der Konfiguration sind $domainConfig = [ 'name' => config('app.name'), 'theme' => 'b2in', 'view_prefix' => 'b2in', 'assets_dir' => 'build/b2in', 'url' => config('app.url'), 'domain_name' => config('app.domain_name'), ]; // Lade die Domain-Konfiguration $confiDomains = config('domains.domains'); // Suche nach der aktuellen Domain in der Konfiguration foreach ($confiDomains as $name => $config) { if (is_array($config) && isset($config['domain_name']) && $config['domain_name'] === $host) { $domainConfig = array_merge($domainConfig, $config); break; } } // Allow theme override via URL parameter (for testing) if ($themeOverride && isset($confiDomains[$themeOverride])) { $domainConfig = array_merge($domainConfig, $confiDomains[$themeOverride]); } // Dynamische ASSET_URL basierend auf der aktuellen Domain setzen // Verhindert CORS-Probleme, da Assets immer von derselben Domain geladen werden $assetUrl = $domainConfig['url']; // Grundlegende Konfiguration im Anwendungskontext verfügbar machen config([ 'app.theme' => $domainConfig['theme'], 'app.view_prefix' => $domainConfig['view_prefix'], 'app.domain_name' => $domainConfig['domain_name'], 'app.url' => $domainConfig['url'], 'app.asset_url' => $assetUrl, // Dynamische Asset-URL für die aktuelle Domain ]); // URL-Generator für die aktuelle Domain konfigurieren // Dies ist wichtig, damit asset() und url() die richtige Domain verwenden URL::forceRootUrl($domainConfig['url']); URL::forceScheme(parse_url($domainConfig['url'], PHP_URL_SCHEME) ?: 'https'); // WICHTIG: Asset-Root direkt im UrlGenerator setzen // Der asset() Helper verwendet einen separaten Asset-Root /** @var UrlGenerator $urlGenerator */ $urlGenerator = app('url'); $urlGenerator->useAssetOrigin($assetUrl); // Spezifischere Daten für die Views verfügbar machen View::share('theme', $domainConfig['theme']); View::share('viewPrefix', $domainConfig['view_prefix']); View::share('domainName', $domainConfig['domain_name']); View::share('domainConfig', $domainConfig); View::share('domainUrl', $domainConfig['url']); View::share('assetUrl', $assetUrl); // Vite-Assets-Konfiguration für die aktuelle Domain if (! app()->runningInConsole()) { if (isset($domainConfig['assets_dir'])) { Vite::useBuildDirectory($domainConfig['assets_dir']); } if (app()->environment('local')) { // Entwicklung: Vite Dev Server mit HMR $viteDevServerUrl = env('VITE_DEV_SERVER_URL', 'https://assets.b2in.test'); Vite::useHotFile(public_path('hot')); config(['app.vite_dev_server_url' => $viteDevServerUrl]); View::share('viteDevServerUrl', $viteDevServerUrl); } else { // Produktion: Assets von der aktuellen Domain laden (kein CORS nötig) Vite::useScriptTagAttributes(['crossorigin' => false]); Vite::useStyleTagAttributes(['crossorigin' => false]); } } } }