withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware): void { $middleware->web(append: [ \App\Http\Middleware\SecurityHeaders::class, ]); }) ->withExceptions(function (Exceptions $exceptions): void { // Renderer amigable para errores en /admin/*: convierte excepciones técnicas // (especialmente SQL) en una redirección back() con un mensaje claro que el // layout admin muestra como SweetAlert modal. Detalle técnico va al log. $exceptions->render(function (\Throwable $e, $request) { if (config('app.debug')) { return null; // En local/debug mantenemos la pantalla detallada de Laravel. } if (!$request->is('admin/*')) { return null; } if ($request->expectsJson() || $request->ajax()) { return null; } // Excepciones que Laravel ya maneja bien (validación, auth, 404, etc.). $passthrough = [ \Illuminate\Validation\ValidationException::class, \Illuminate\Auth\AuthenticationException::class, \Illuminate\Auth\Access\AuthorizationException::class, \Illuminate\Session\TokenMismatchException::class, \Symfony\Component\HttpKernel\Exception\HttpException::class, \Symfony\Component\HttpKernel\Exception\NotFoundHttpException::class, \Illuminate\Database\Eloquent\ModelNotFoundException::class, ]; foreach ($passthrough as $cls) { if ($e instanceof $cls) return null; } if ($e instanceof \Illuminate\Database\QueryException) { $code = (int) ($e->errorInfo[1] ?? 0); $msg = match (true) { $code === 1062 => 'Ya existe un registro con esos datos. Verificá si no fue cargado previamente o si se encuentra en la papelera.', in_array($code, [1451, 1452], true) => 'Esta operación no se puede completar porque existen datos relacionados (jugadores, equipos o eventos vinculados).', default => 'Hubo un problema con la base de datos. Intentá nuevamente o contactá al administrador.', }; \Log::error('[admin] QueryException', [ 'code' => $code, 'message' => $e->getMessage(), 'url' => $request->fullUrl(), ]); return back()->withInput()->with('admin_error_modal', $msg); } \Log::error('[admin] Excepción no manejada', [ 'exception' => $e->getMessage(), 'class' => get_class($e), 'url' => $request->fullUrl(), ]); return back()->withInput()->with( 'admin_error_modal', 'Ocurrió un error inesperado al procesar la solicitud. Intentá nuevamente o contactá al administrador.' ); }); })->create();