111 lines
4.2 KiB
PHP
111 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace App\Providers;
|
|
|
|
use Illuminate\Routing\UrlGenerator;
|
|
use Illuminate\Support\Facades\Request;
|
|
use Illuminate\Support\Facades\URL;
|
|
use Illuminate\Support\Facades\View;
|
|
use Illuminate\Support\Facades\Vite;
|
|
use Illuminate\Support\ServiceProvider;
|
|
|
|
class ThemeServiceProvider extends ServiceProvider
|
|
{
|
|
/**
|
|
* Register services.
|
|
*/
|
|
public function register(): void
|
|
{
|
|
// Registriere die domains.php Konfigurationsdatei
|
|
$this->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]);
|
|
}
|
|
}
|
|
}
|
|
}
|