presseportale/app/Support/WebPortalContext.php
Kevin Adametz e5a63bcedd Optimierung 4.1: Web-Portal-/Domain-Kontext extrahiert
- WebPortalContext::fromRequest() buendelt die zuvor ~6x je Route-Closure
  wiederholte Host->Portal-Ableitung (portal, language, portalValues,
  domainConfig).
- DomainAssetContext::applyWebDomainConfig() ist die Single Source of Truth fuer
  die Domain-/Theme-Anwendung (config + View::share + Vite); die fruehere
  $applyWebDomainConfig-Closure in routes/web.php ist nur noch ein duenner
  Delegations-Wrapper, damit Bare-Root- und Edition-Home-Route unveraendert
  per Closure aufrufen koennen.
- Die 6 Portal-Seiten-Closures (Kategorie, Detail, Veroeffentlichen, Suche,
  Newsrooms, Newsroom-Detail) sowie Preise nutzen jetzt den zentralen Kontext.

Abgesichert durch die 92 Web/-Tests (jede Seite laeuft ueber den neuen Kontext).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:42:00 +00:00

42 lines
1.3 KiB
PHP

<?php
namespace App\Support;
use App\Enums\Portal;
/**
* Öffentlicher Portal-Kontext (Presseecho/Businessportal24) einer Web-Landingpage,
* abgeleitet aus dem Host. Bündelt die zuvor in jeder Route-Closure wiederholte
* Host→Portal-Ableitung samt Anwendung der Domain-/Theme-Konfiguration.
*/
class WebPortalContext
{
/**
* @param list<string> $portalValues Eigenes Portal plus `both`.
* @param array<string, mixed> $domainConfig
*/
private function __construct(
public readonly string $domainKey,
public readonly Portal $portal,
public readonly string $language,
public readonly array $portalValues,
public readonly array $domainConfig,
) {}
public static function fromRequest(): self
{
$host = request()->getHost();
[$domainKey, $portal] = str_contains($host, 'presseecho')
? ['presseecho', Portal::Presseecho]
: ['businessportal24', Portal::Businessportal24];
return new self(
domainKey: $domainKey,
portal: $portal,
language: app()->getLocale(),
portalValues: [$portal->value, Portal::Both->value],
domainConfig: DomainAssetContext::applyWebDomainConfig($domainKey),
);
}
}