presseportale/app/Http/Middleware/SetEdition.php
Kevin Adametz 253141c6dc Frontend: Editorial-Relaunch der öffentlichen Strecke + Ausgaben-Routing
Öffentliche Seiten auf gemeinsames Editorial-Design (x-web.site-header/-footer,
Design-Tokens) und Ausgaben-Präfix /{edition}/ (de|en) umgestellt.

- Routing: neue Middleware SetEdition (Locale + URL::defaults), /{edition}-Gruppe
  in routes/web.php, Root-Redirect auf /de, 301 für Legacy-.html-URLs,
  Baseline-Default in AppServiceProvider.
- Neue URL-Schemata: /{edition}/press-release/{slug}, /{edition}/category/{slug}.
- Ausgabe = Sprache: DE/EN-Umschalter (Region/CH/AT entfernt); EditorialClock
  und Livewire-Komponenten sprachdynamisch.
- Detail-, Kategorie- und Veröffentlichen-Seite mit echten Daten neu aufgebaut.
- Suche aktiviert: Volt-Komponente livewire/web/search (Titel/Text/Keywords +
  Firma + Rubrik, Filter, Sortierung, Pagination, URL-Parameter q/category/sort).
- Rubriken-Navigation statt Übersichtsseite: Helper CategoryNavigation;
  web/kategorien.blade.php + Route entfernt (Legacy-301).
- Tests: Edition-Routing, Kategorie-Seite/-Navigation, Detail, Veröffentlichen,
  Suche, EditorialClock. Doku in "Echte öffentliche Unterseiten.md" aktualisiert.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 16:39:28 +00:00

47 lines
1.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;
use Symfony\Component\HttpFoundation\Response;
/**
* Setzt die aktive Ausgabe (Sprache) für den Public-Frontend-Request.
*
* Das Frontend wird unter einem Sprach-Präfix ausgeliefert: `/de/...` und
* `/en/...`. Die Ausgabe entspricht 1:1 der Inhalts-Sprache.
*
* Aufgaben:
* 1. Ausgabe aus dem ersten URL-Segment lesen (de|en), sonst Fallback `de`.
* 2. `URL::defaults(['edition' => …])` setzen, damit benannte Routen
* (`route('kategorie', …)`) das Präfix automatisch erhalten auch auf
* Seiten ohne Edition-Präfix (Hub/Auth) bleibt so ein gültiger Default.
* 3. App-Locale nur für echte Edition-URLs übernehmen, damit Admin-/Hub-Seiten
* ihre eigene Locale behalten.
*/
class SetEdition
{
/**
* @var array<int, string>
*/
public const EDITIONS = ['de', 'en'];
public const DEFAULT_EDITION = 'de';
public function handle(Request $request, Closure $next): Response
{
$segment = $request->segment(1);
$isEdition = in_array($segment, self::EDITIONS, true);
$edition = $isEdition ? $segment : self::DEFAULT_EDITION;
URL::defaults(['edition' => $edition]);
if ($isEdition) {
app()->setLocale($edition);
}
return $next($request);
}
}