Ö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>
47 lines
1.4 KiB
PHP
47 lines
1.4 KiB
PHP
<?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);
|
||
}
|
||
}
|