withProviders() ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware): void { $middleware->alias([ 'admin' => AdminMiddleware::class, 'admin-only' => AdminOnlyMiddleware::class, 'staff' => StaffMiddleware::class, 'active' => ActiveUserMiddleware::class, 'dsgvo' => DsgvoConsentMiddleware::class, ]); // InstallerMiddleware NACH StartSession (nicht prepend), damit // das Setup-Token in der Session gespeichert werden kann. // AppServiceProvider::register() setzt session.driver='file' // vor der Installation, daher braucht StartSession keine DB. $middleware->web(append: [ InstallerMiddleware::class, SetLocaleMiddleware::class, ActiveUserMiddleware::class, SecurityHeadersMiddleware::class, ]); }) ->withExceptions(function (Exceptions $exceptions): void { // Waehrend der Installation: Fehler ohne View-Engine rendern. // Verhindert den kaskadierenden "Target class [view]"-Fehler, // falls ein Provider-Fehler auftritt bevor Views verfuegbar sind. $exceptions->render(function (\Throwable $e, \Illuminate\Http\Request $request) { if (file_exists(storage_path('installed'))) { return null; // Nach Installation: Standard-Handler } $msg = htmlspecialchars($e->getMessage()); $file = htmlspecialchars($e->getFile()) . ':' . $e->getLine(); $trace = htmlspecialchars($e->getTraceAsString()); $html = '' . '' . 'Installationsfehler' . '' . '' . '
' . '

Fehler beim Starten

' . '
' . '

' . $msg . '

' . '

Datei: ' . $file . '

' . '
Stack-Trace anzeigen' . '
' . $trace . '
' . 'Erneut versuchen' . '
'; return new \Illuminate\Http\Response($html, 500); }); })->create();