Files
Laucha1312 90c5f85512 2
2026-06-04 15:15:23 -03:00

73 lines
3.3 KiB
PHP

<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->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();