mivita/dev/subdomain-optimization-gpt-5-v3/ROUTE_PARAMETER_CLEANUP.md
2025-10-20 17:42:08 +02:00

4.9 KiB

UserShop Route-Parameter-Cleanup

🎯 Problem:

UserShop-Routes definieren bestimmte Parameter:

Route::get('/{site}/{subsite?}/{product_slug?}', 'Web\SiteController@site')
    ->name('user-shop.site');

Erwartete Parameter: {site}, {subsite}, {product_slug} NICHT: {subdomain}

Ohne Cleanup würde Laravel die subdomain als zusätzlichen Parameter an den Controller weiterreichen, was zu Routing-Problemen führt.

Lösung: Route-Parameter-Cleanup in DomainBootstrap

/**
 * UserShop-Routing: subdomain aus Route-Parametern entfernen
 *
 * Wenn ein UserShop erkannt wird, muss die subdomain aus den Route-Parametern
 * entfernt werden, damit sie nicht in die Controller-Parameter weitergegeben wird.
 */
private function cleanupRouteParameters(Request $request, DomainContext $context): void
{
    // Nur bei UserShop-Domains Route-Parameter bereinigen
    if ($context->type !== 'user-shop') {
        return;
    }

    // Route muss existieren und subdomain Parameter haben
    if (!$request->route() || !$request->route('subdomain')) {
        return;
    }

    try {
        // subdomain aus Route-Parametern entfernen
        $request->route()->forgetParameter('subdomain');

        // Optional: Debug-Logging in Development
        if (config('subdomain.debug.log_domain_switches', false)) {
            Log::debug('UserShop routing: subdomain parameter removed', [
                'user_shop_slug' => $context->userShop?->slug ?? 'unknown',
                'remaining_route_params' => $request->route()->parameters()
            ]);
        }
    } catch (\Throwable $e) {
        // Fehler beim Route-Parameter-Cleanup nicht kritisch
        Log::warning('Failed to cleanup route parameters', [
            'user_shop_slug' => $context->userShop?->slug ?? 'unknown',
            'error' => $e->getMessage()
        ]);
    }
}

🔄 Workflow:

  1. DomainBootstrap erkennt UserShop-Domain
  2. DomainContext wird erstellt mit type = 'user-shop'
  3. cleanupRouteParameters() wird aufgerufen
  4. forgetParameter('subdomain') entfernt subdomain aus Route-Parametern
  5. SiteController bekommt nur die erwarteten Parameter (site, subsite, product_slug)

📍 Integration in DomainBootstrap:

// Context verfügbar machen
$this->registerContext($context, $request);

// UserShop-Routing: subdomain aus Route-Parametern entfernen
$this->cleanupRouteParameters($request, $context);

// Minimal Debug-Logging für Production
$this->logDomainResolution($context, $host);

Timing: Nach Domain-Context-Erstellung, vor Response-Processing

🛡️ Sicherheit & Robustheit:

Robuste Prüfungen:

  • Nur bei type = 'user-shop' aktiv
  • Prüft ob Route existiert
  • Prüft ob subdomain Parameter existiert
  • Try-catch für graceful error handling

Error-Handling:

try {
    $request->route()->forgetParameter('subdomain');
} catch (\Throwable $e) {
    // Fehler beim Route-Parameter-Cleanup nicht kritisch
    Log::warning('Failed to cleanup route parameters', [
        'error' => $e->getMessage()
    ]);
}

Fehlverhalten: System funktioniert weiter, nur Logging für Troubleshooting

🧪 Debug & Testing:

Debug-Logging (nur wenn aktiviert):

if (config('subdomain.debug.log_domain_switches', false)) {
    Log::debug('UserShop routing: subdomain parameter removed', [
        'user_shop_slug' => $context->userShop?->slug ?? 'unknown',
        'remaining_route_params' => $request->route()->parameters()
    ]);
}

Testing-Workflow:

  1. UserShop besuchen: https://berater123.mivita.test/category/products
  2. Debug-Log prüfen: subdomain Parameter entfernt?
  3. Controller prüfen: Bekommt nur site=category, subsite=products?
  4. Route funktional: Seite lädt korrekt?

📊 Vorher vs. Nachher:

Aspekt Vorher Nachher
Route-Parameter subdomain, site, subsite, product_slug site, subsite, product_slug
Controller-Parameter Unerwartete subdomain Nur erwartete Parameter
Routing-Stabilität Parameter-Mismatch möglich Sauber definierte Parameter
Debug-Info Keine Sichtbarkeit Optional Debug-Logging

🚀 Production-Status:

  • Implementiert in DomainBootstrap::cleanupRouteParameters()
  • Getestet - Syntax-Error-frei
  • Dokumentiert - Vollständige Kommentierung
  • Robust - Graceful error handling
  • Performant - Minimaler Overhead, nur bei UserShops aktiv
  • Debuggbar - Optional detailliertes Logging

Integriert in GPT-5 v3.1 - Ready für Live-Deployment! 🎯