- Introducción
- Configuración
- El controlador de excepciones
- Informes de excepciones
- Excepciones de representación
- Excepciones reportables y renderizables
- Excepciones HTTP
Introducción
Cuando inicia un nuevo proyecto de Laravel, el manejo de errores y excepciones ya está configurado para usted. los AppExceptionsHandler
La clase es donde todas las excepciones desencadenadas por su aplicación se registran y luego se devuelven al usuario. Profundizaremos en esta clase a lo largo de esta documentación.
Configuración
los debug
opción en tu config/app.php
El archivo de configuración determina cuánta información sobre un error se muestra realmente al usuario. De forma predeterminada, esta opción está configurada para respetar el valor de la APP_DEBUG
variable de entorno, que se almacena en su .env
expediente.
Para el desarrollo local, debe establecer el APP_DEBUG
variable de entorno a true
. En su entorno de producción, este valor siempre debe ser false
. Si el valor se establece en true
en producción, corre el riesgo de exponer valores de configuración confidenciales a los usuarios finales de su aplicación.
El controlador de excepciones
Informes de excepciones
Todas las excepciones son manejadas por el AppExceptionsHandler
clase. Esta clase contiene un register
método en el que puede registrar devoluciones de llamada de reportero y renderizador de excepciones personalizadas. Examinaremos cada uno de estos conceptos en detalle. Los informes de excepciones se utilizan para registrar excepciones o enviarlas a un servicio externo como Llamarada, Bugsnag o Centinela. De forma predeterminada, las excepciones se registrarán según su configuración de registro. Sin embargo, puede registrar las excepciones como desee.
Por ejemplo, si necesita informar diferentes tipos de excepciones de diferentes formas, puede utilizar la reportable
método para registrar un cierre que debe ejecutarse cuando es necesario informar una excepción de un tipo determinado. Laravel deducirá qué tipo de excepción informa el Cierre examinando la sugerencia de tipo del Cierre:
useAppExceptionsCustomException;/** * Register the exception handling callbacks for the application. * * @return void */publicfunctionregister()$this->reportable(function(CustomException$e)//);
Cuando registra una devolución de llamada de informe de excepción personalizada utilizando el reportable
, Laravel seguirá registrando la excepción utilizando la configuración de registro predeterminada para la aplicación. Si desea detener la propagación de la excepción a la pila de registro predeterminada, puede usar el stop
método al definir su devolución de llamada o devolución de informes false
de la devolución de llamada:
$this->reportable(function(CustomException$e)//)->stop();$this->reportable(function(CustomException$e)returnfalse;);
Para personalizar los informes de excepciones para una excepción determinada, también puede considerar el uso de excepciones notificables
Contexto de registro global
Si está disponible, Laravel agrega automáticamente la ID del usuario actual al mensaje de registro de cada excepción como datos contextuales. Puede definir sus propios datos contextuales globales anulando el context
método de su aplicación AppExceptionsHandler
clase. Esta información se incluirá en el mensaje de registro de cada excepción escrito por su aplicación:
/** * Get the default context variables for logging. * * @return array */protectedfunctioncontext()returnarray_merge(parent::context(),['foo'=>'bar',]);
los report
Ayudante
A veces, es posible que deba informar una excepción, pero continuar manejando la solicitud actual. los report
La función auxiliar le permite informar rápidamente una excepción utilizando su controlador de excepciones sin generar una página de error:
publicfunctionisValid($value)try// Validate the value...catch(Throwable$e)report($e);returnfalse;
Ignorar excepciones por tipo
los $dontReport
La propiedad del manejador de excepciones contiene un array de tipos de excepciones que no se registrarán. Por ejemplo, las excepciones que resultan de errores 404, así como varios otros tipos de errores, no se escriben en sus archivos de registro. Puede agregar otros tipos de excepciones a este array según sea necesario:
/** * A list of the exception types that should not be reported. * * @var array */protected$dontReport=[IlluminateAuthAuthenticationException::class,IlluminateAuthAccessAuthorizationException::class,SymfonyComponentHttpKernelExceptionHttpException::class,IlluminateDatabaseEloquentModelNotFoundException::class,IlluminateValidationValidationException::class,];
Excepciones de representación
De forma predeterminada, el controlador de excepciones de Laravel convertirá las excepciones en una respuesta HTTP por usted. Sin embargo, puede registrar un cierre de renderizado personalizado para excepciones de un tipo determinado. Puede lograr esto a través del renderable
método de su controlador de excepciones. Laravel deducirá qué tipo de excepción presenta el Cierre examinando la sugerencia de tipo del Cierre:
useAppExceptionsCustomException;/** * Register the exception handling callbacks for the application. * * @return void */publicfunctionregister()$this->renderable(function(CustomException$e,$request)returnresponse()->view('errors.custom',[],500););
Excepciones reportables y renderizables
En lugar de excepciones de verificación de tipo en el controlador de excepciones report
y render
métodos, puede definir report
y render
métodos directamente en su excepción personalizada. Cuando existan estos métodos, el marco los llamará automáticamente:
namespaceAppExceptions;useException;classRenderExceptionextendsException/**
* Report the exception.
*
* @return void
*/publicfunctionreport()///**
* Render the exception into an HTTP response.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/publicfunctionrender($request)returnresponse(...);
Si tu excepción contiene una lógica de informes personalizada que solo ocurre cuando se cumplen ciertas condiciones, es posible que debas indicarle a Laravel que informe la excepción utilizando la configuración predeterminada de manejo de excepciones. Para lograr esto, puede regresar false
de la excepción report
método:
/** * Report the exception. * * @return bool|void */publicfunctionreport()// Determine if the exception needs custom reporting...returnfalse;
Puede escribir sugerencias sobre las dependencias necesarias del
report
y el contenedor de servicios de Laravel los inyectará automáticamente en el método.
Excepciones HTTP
Algunas excepciones describen códigos de error HTTP del servidor. Por ejemplo, esto puede ser un error de “página no encontrada” (404), un “error no autorizado” (401) o incluso un error 500 generado por el desarrollador. Para generar dicha respuesta desde cualquier lugar de su aplicación, puede utilizar el abort
ayudante:
abort(404);
Páginas de error HTTP personalizadas
Laravel facilita la visualización de páginas de error personalizadas para varios códigos de estado HTTP. Por ejemplo, si desea personalizar la página de error para los códigos de estado HTTP 404, cree un resources/views/errors/404.blade.php
. Este archivo se publicará en todos los errores 404 generados por su aplicación. Las vistas dentro de este directorio deben tener un nombre que coincida con el código de estado HTTP al que corresponden. los HttpException
instancia planteada por el abort
La función se pasará a la vista como una $exception
variable:
<h2>$exception->getMessage()</h2>
Puede publicar las plantillas de página de error de Laravel usando el vendor:publish
Mando artesanal. Una vez publicadas las plantillas, puedes personalizarlas a tu gusto:
php artisan vendor:publish --tag=laravel-errors