diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php new file mode 100644 index 00000000..e138d338 --- /dev/null +++ b/resources/views/errors/403.blade.php @@ -0,0 +1,5 @@ +@extends('errors.layout') + +@section('code', '403') +@section('title', 'Zugriff verweigert') +@section('message', 'Für diese Seite fehlt Ihnen die Berechtigung. Melden Sie sich mit einem passenden Konto an oder kehren Sie zur Startseite zurück.') diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php new file mode 100644 index 00000000..bddc82f3 --- /dev/null +++ b/resources/views/errors/404.blade.php @@ -0,0 +1,5 @@ +@extends('errors.layout') + +@section('code', '404') +@section('title', 'Seite nicht gefunden') +@section('message', 'Die aufgerufene Seite existiert nicht oder wurde verschoben. Prüfen Sie die Adresse oder starten Sie auf der Startseite neu.') diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php new file mode 100644 index 00000000..3742067e --- /dev/null +++ b/resources/views/errors/419.blade.php @@ -0,0 +1,5 @@ +@extends('errors.layout') + +@section('code', '419') +@section('title', 'Sitzung abgelaufen') +@section('message', 'Ihre Sitzung ist abgelaufen. Laden Sie die Seite neu und versuchen Sie es noch einmal.') diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php new file mode 100644 index 00000000..7bda0107 --- /dev/null +++ b/resources/views/errors/500.blade.php @@ -0,0 +1,5 @@ +@extends('errors.layout') + +@section('code', '500') +@section('title', 'Interner Fehler') +@section('message', 'Da ist etwas schiefgelaufen. Wir sind informiert – bitte versuchen Sie es in wenigen Minuten erneut.') diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php new file mode 100644 index 00000000..f724e2a5 --- /dev/null +++ b/resources/views/errors/503.blade.php @@ -0,0 +1,5 @@ +@extends('errors.layout') + +@section('code', '503') +@section('title', 'Wartungsmodus') +@section('message', 'Wir führen gerade eine kurze Wartung durch und sind gleich wieder für Sie da.') diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php new file mode 100644 index 00000000..c21d8720 --- /dev/null +++ b/resources/views/errors/layout.blade.php @@ -0,0 +1,93 @@ +{{-- + Gemeinsames Grundgerüst der Fehlerseiten. Bewusst self-contained + (Inline-CSS, keine Vite-Assets), damit die Seiten auch bei kaputtem + Asset-Build oder vor dem ersten `npm run build` zuverlässig rendern. +--}} + + + + + + + @yield('code') · @yield('title') – {{ $domainName ?? 'Pressekonto' }} + + + +
+
@yield('code')
+

@yield('title')

+

@yield('message')

+ Zur Startseite +
{{ $domainName ?? 'Pressekonto' }}
+
+ + diff --git a/tests/Feature/ErrorPagesTest.php b/tests/Feature/ErrorPagesTest.php new file mode 100644 index 00000000..32d5e3d7 --- /dev/null +++ b/tests/Feature/ErrorPagesTest.php @@ -0,0 +1,26 @@ +get('https://businessportal24.test/de/gibt-es-nicht') + ->assertNotFound() + ->assertSee('Seite nicht gefunden') + ->assertSee('Zur Startseite'); +}); + +test('custom error views render self-contained', function (string $view, string $expected) { + /** @var TestCase $this */ + $rendered = $this->view("errors.{$view}"); + + $rendered->assertSee($expected); + // Kein Vite-Asset: Die Seiten müssen auch bei kaputtem Build rendern. + expect((string) $rendered)->not->toContain('/build/'); +})->with([ + ['403', 'Zugriff verweigert'], + ['404', 'Seite nicht gefunden'], + ['419', 'Sitzung abgelaufen'], + ['500', 'Interner Fehler'], + ['503', 'Wartungsmodus'], +]);