🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónManejo global de errores en el framework
5 tareas · 40 min · Principiante
Todo framework tiene un último lugar al que llegan las excepciones que nadie manejó. Bien configurado, registra lo que importa y responde sin enseñar nada; mal configurado, esconde las fallas que más importan o devuelve al cliente el mensaje interno de cualquier error. Droguería Siemprevida no encuentra en su registro ni una línea de las dos caídas de su pasarela en noviembre. Te entrega su configuración de excepciones, la lista de sus excepciones propias, los bloques catch de sus controladores, el conteo de errores del mes y dos respuestas de producción.
Objetivo de la sala
Todo framework tiene un último lugar al que llegan las excepciones que nadie manejó. Bien configurado, registra lo que importa y responde sin enseñar nada; mal configurado, esconde las fallas que más importan o devuelve al cliente el mensaje interno de cualquier error. Droguería Siemprevida no encuentra en su registro ni una línea de las dos caídas de su pasarela en noviembre. Te entrega su configuración de excepciones, la lista de sus excepciones propias, los bloques catch de sus controladores, el conteo de errores del mes y dos respuestas de producción.En las versiones recientes de Laravel, como la 12, el manejo global se configura en bootstrap/app.php con withExceptions. Ahí se decide qué se registra (report), qué clases no se registran nunca (dontReport) y cómo se convierte una excepción en respuesta (render). La cantidad de detalle que se muestra la gobierna además el ajuste de depuración, que en producción tiene que estar apagado. El Top 10 de OWASP recomienda exactamente esta pieza: un manejo centralizado y coherente, con un manejador global como último recurso.
Último recurso es la palabra importante. El manejador global garantiza que nada salga en crudo y que todo quede registrado, pero no conoce el negocio: no sabe si un pedido se retiene, se revierte o se reintenta. Eso se decide donde ocurre la excepción. Y como todo pasa por él, un error en su configuración se repite en toda la aplicación a la vez.
Responde para continuar
¿Qué papel le corresponde al manejador global de excepciones?
Ver pista de ayuda
Pregúntate qué sabe el manejador global sobre el pedido que estaba en curso.
Abre el laboratorio y lee app.php con excepciones-propias.txt al lado. La lista que no se reporta se armó para quitar ruido, y dos de sus clases son errores esperados cuya causa es el cliente. La tercera es otra cosa. Compara con errores-reportados-nov.txt: el proveedor de pagos tuvo dos incidentes ese mes y el conteo de la tienda no lo refleja.
Responde para continuar
¿Qué excepción de la lista que no se reporta corresponde a la falla de una dependencia? Escríbela tal como aparece en app.php.
Ver pista de ayuda
Lee qué significa cada clase de la lista según la documentación interna.
El render de la configuración responde a toda excepción de la API con su clase y su mensaje, y siempre con código 500. El mensaje de una excepción se escribió para quien depura, no para el cliente: en una falla de conexión a la base de datos puede traer el motor, el servidor y la consulta. Y el código fijo en 500 rompe el otro extremo: un error de validación del cliente sale como si fuera del servidor. Lee respuestas-capturadas.txt.
Responde para continuar
¿Qué servidor interno aparece en una respuesta de producción por culpa de la forma en que el render global arma el cuerpo? Escríbelo completo.
Ver pista de ayuda
Está dentro del mensaje de la excepción de la base de datos.
El manejador global solo ve lo que llega hasta él. Un catch que atrapa una excepción genérica y no hace nada con ella la hace desaparecer antes: no se registra, no se alerta y el usuario recibe una respuesta que finge normalidad. El catálogo CWE tiene nombre para las dos partes del problema: capturar una excepción genérica (CWE-396) y detectar un error sin actuar (CWE-390). Lee catch-en-controladores.txt y separa los bloques que capturan algo genérico de los que capturan una excepción concreta y esperada; de los genéricos, descarta los que reportan, registran o vuelven a lanzar.
Responde para continuar
¿Cuántos bloques capturan una excepción genérica y no la reportan, no la registran ni la vuelven a lanzar?
Ver pista de ayuda
Seis bloques capturan algo genérico; mira qué hace cada uno en las líneas siguientes.
Los hallazgos de esta sala se corrigen en dos sitios. En la configuración global: las fallas de dependencias se reportan siempre, y la API responde con un formato propio para el cliente, el código de estado que corresponde a cada error y un identificador del incidente, dejando el mensaje interno solo en el registro. En los controladores: cada catch genérico que se traga el error pasa a reportarlo o se reemplaza por una captura de la excepción concreta que se espera.
Responde para continuar
¿Qué cambio en bootstrap/app.php corrige lo que encontraste en la configuración global?
Ver pista de ayuda
Lo que falla en una dependencia tiene que verse en el registro, y lo interno no tiene que verse en la respuesta.
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.