Manejo de errores PHP 8 con Laravel 8

[vc_row el_class=”blog-info”][vc_column][vc_single_image source=”featured_image” img_size=”full” style=”vc_box_rounded”][vc_empty_space height=”40px”][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text el_class=”font-weight-bold”]

Laravel 8 Manejo de errores PHP 8 – (2021)

La mayoría de las aplicaciones web tienen mecanismos específicos para el manejo de errores. Utilizándolos, rastrean errores y excepciones y los registran para analizar el rendimiento. En este capítulo, leerá sobre el manejo de errores y excepciones en las aplicaciones de Laravel.

[/vc_column_text][vc_empty_space height=”40px”][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text]


Puntos importantes

Antes de continuar para aprender en detalle sobre el manejo de errores en Laravel, tenga en cuenta los siguientes puntos importantes:

  • Para cualquier proyecto nuevo, Laravel registra errores y excepciones en la clase App \ Exceptions \ Handler, de forma predeterminada. Luego se envían de nuevo al usuario para su análisis.
  • Cuando su aplicación Laravel está configurada en modo de depuración, se mostrarán mensajes de error detallados con rastros de pila en cada error que ocurra dentro de su aplicación web.

manejo de errores

manejo de errores

Registro de errores

El registro de los errores en una aplicación web ayuda a rastrearlos y a planificar una estrategia para eliminarlos. La información de registro se puede configurar en la aplicación web en el archivo config/app.php. Tenga en cuenta los siguientes puntos al tratar con el registro de errores en Laravel:

  • Laravel usa la biblioteca de registro PHP monolog.
  • Los parámetros de registro que se utilizan para el seguimiento de errores son single, daily, syslog y errorlog.
  • Por ejemplo, si desea registrar los mensajes de error en los archivos de registro, debe establecer el valor de registro en la configuración de su aplicación a daily como se muestra en el siguiente comando:
'log' => env('APP_LOG','daily'),'log_max_files' => 25;

Niveles de gravedad

Como Laravel usa la biblioteca de registro PHP monolog, existen varios parámetros que se usan para analizar los niveles de gravedad. Varios niveles de gravedad disponibles son mensajes de error, critical, alert y emergency. Puede establecer el nivel de gravedad como se muestra en el siguiente comando:

'log_level' => env('APP_LOG_LEVEL', 'error')

Para Laravel 8 actualizado así

Para Laravel 8 encontramos nuevos métodos en el handler.php. Comparto este código para manejar excepciones en el proyecto Laravel.

Por defecto, el proyecto Laravel viene con el nuevo método de registro.

/**
 * Register the exception handling callbacks for the application.
 *
 * @return void
 */
public function register()
{

    $this->reportable(function (Throwable $e){

    });
}

Debemos agregar un nuevo método aquí para manejar excepciones.

public function handleException( Throwable $e){
    if ($e instanceof HttpException) {
        $code = $e->getStatusCode();
        $defaultMessage = \Symfony\Component\HttpFoundation\Response::$statusTexts[$code];
        $message = $e->getMessage() == "" ? $defaultMessage : $e->getMessage();
        return $this->errorResponse($message, $code);
    } else if ($e instanceof ModelNotFoundException) {
        $model = strtolower(class_basename($e->getModel()));
        return $this->errorResponse("Does not exist any instance of {$model} with the given id", Response::HTTP_NOT_FOUND);
    } else if ($e instanceof AuthorizationException) {
        return $this->errorResponse($e->getMessage(), Response::HTTP_FORBIDDEN);
    } else if ($e instanceof TokenBlacklistedException) {
        return $this->errorResponse($e->getMessage(), Response::HTTP_UNAUTHORIZED);
    } else if ($e instanceof AuthenticationException) {
        return $this->errorResponse($e->getMessage(), Response::HTTP_UNAUTHORIZED);
    } else if ($e instanceof ValidationException) {
        $errors = $e->validator->errors()->getMessages();
        return $this->errorResponse($errors, Response::HTTP_UNPROCESSABLE_ENTITY);
    } else {
        if (config('app.debug'))
            return $this->dataResponse($e->getMessage());
        else {
            return $this->errorResponse('Try later', Response::HTTP_INTERNAL_SERVER_ERROR);
        }
    }
}

Verá métodos para la respuesta como se llama. Por ejemplo

return $this->errorResponse('Try later', Response::HTTP_INTERNAL_SERVER_ERROR);

Creo un rasgo para las respuestas. Usted también puede hacerlo. Comparto el rasgo:

/**
 * Data Response
 * @param $data
 * @return JsonResponse
 */
public function dataResponse($data): JsonResponse
{
    return response()->json(['content' => $data], Response::HTTP_OK);
}

/**
 * Success Response
 * @param string $message
 * @param int $code
 * @return JsonResponse
 */
public function successResponse(string $message, $code = Response::HTTP_OK): JsonResponse
{
    return response()->json(['success' => $message, 'code' => $code], $code);
}

/**
 * Error Response
 * @param $message
 * @param int $code
 * @return JsonResponse
 *
 */
public function errorResponse($message, $code = Response::HTTP_BAD_REQUEST): JsonResponse
{
    return response()->json(['error' => $message, 'code' => $code], $code);
}

Después de crear este rasgo y crear la función handleException, agrega código al método de register.

$this->renderable(function (Throwable $e) {
    return $this->handleException($e);
});

Después de eso, el cuerpo de la función se verá así.

public function register()
{

    $this->reportable(function (Throwable $e){

    });

    $this->renderable(function (Throwable $e) {
        return $this->handleException($e);
    });
}

Y después de todo, su manejo de excepciones y errores funciona muy bien.


¡Gracias por leer!

[/vc_column_text][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row el_class=”social-info”][vc_column width=”1/6″][/vc_column][vc_column width=”2/3″][vc_row_inner][vc_column_inner width=”1/2″][vc_column_text][social_share_button themes=’theme1′][/vc_column_text][/vc_column_inner][vc_column_inner el_class=”youtube-inner-col” width=”1/2″][vc_column_text][likebtn theme=”youtube” lang=”auto” show_like_label=”0″ white_label=”1″ alignment=”right”][/vc_column_text][/vc_column_inner][/vc_row_inner][vc_row_inner el_class=”social-info-inner”][vc_column_inner width=”1/4″][vc_single_image image=”921″][/vc_column_inner][vc_column_inner width=”3/4″][vc_column_text]

Diego Pacheco

Ingeniero en Sitemas, MBA (Babson College). Desarrollador PHP/Java/JavaScript. Fundador & CEO de EpicStudio. Entusiasta de las tecnologías web (JavaScript, Vue, Laravel, AWS, Docker) Viajes, Negocios, Surf y Growth.[/vc_column_text][asvc_list_item icon_fontawesome=”fa fa-calendar-o” icon_size=”14px”]Programar una reunión[/asvc_list_item][/vc_column_inner][/vc_row_inner][/vc_column][vc_column width=”1/6″][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

Recent Post

[/vc_column_text][lvca_posts_carousel posts_query=”size:3|order_by:rand|post_type:post” image_linkable=”true” image_size=”full” taxonomy_chosen=”post_tag” display_title=”true” display_post_date=”true” display_summary=”true” autoplay_speed=”3000″ animation_speed=”300″ display_columns=”3″ scroll_columns=”3″ gutter=”3″ tablet_display_columns=”2″ tablet_scroll_columns=”2″ tablet_gutter=”3″ tablet_width=”800″ mobile_display_columns=”1″ mobile_scroll_columns=”1″ mobile_gutter=”3″ mobile_width=”480″][vc_empty_space height=”20px”][/vc_column][/vc_row]