Si extrañas el modo de depuración de Laravel 4, o simplemente quieres cambiar un poco la forma en que se muestran las excepciones de tu aplicación, sigue este tutorial para que puedas mejorar el estilo de estos mensajes con Whoopsun framework para el manejo de errores en PHP.

Este paquete estuvo disponible en el núcleo de Laravel hasta le versión 4.2 y fue removido posteriormente a partir de la versión 5, pero no te preocupes, es muy fácil de instalar y configurar.

Instalación vía Composer

El paquete está disponible para su descarga con Composer, simplemente debes ejecutar desde la consola

$ composer require filp/whoops

¿Como se muestran las excepciones en Laravel?

Esto se hace dentro del archivo Handler.php que se encuentra ubicado en app/Exceptions.

El método render() es el que se encarga de devolver a la vista las excepciones generadas por la aplicación. Inicialmente este método se vería de la siguiente manera:

public function render($request, Exception $e)
{
    return parent::render($request, $e);
}

Este método devuelve a su vez la respuesta obtenida por el método render() perteneciente a la clase Illuminate\Foundation\Exceptions\Handler.php de la cual extiende App\Exceptions\Handler.php

    public function render($request, Exception $e)
    {
        if ($e instanceof HttpResponseException) {
            return $e->getResponse();
        } elseif ($e instanceof ModelNotFoundException) {
            $e = new NotFoundHttpException($e->getMessage(), $e);
        } elseif ($e instanceof AuthorizationException) {
            $e = new HttpException(403, $e->getMessage());
        } elseif ($e instanceof ValidationException && $e->getResponse()) {
            return $e->getResponse();
        }

        if ($this->isHttpException($e)) {
            return $this->toIlluminateResponse($this->renderHttpException($e), $e);
        } else {
            return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e);
        }
    }

Finalmente el metodo toIlluminateResponse devuelve la respuesta a la vista

protected function toIlluminateResponse($response, Exception $e)
    {
        $response = new Response($response->getContent(), $response->getStatusCode(), $response->headers->all());

        $response->exception = $e;

        return $response;
    }

Implementando Whoops

Una vez instalado es tan simple usar el namespace y crear una nueva instancia.

Para implementar Whoops nos devolvemos a la clase App\Exceptions\Handler.php y editamos el método render de la siguiente manera:

    public function render($request, Exception $e)
    {
        // Verificamos si el debug esta activo
        if (config('app.debug')) {
            // Creamos una nueva instancia de la clase Run
            $whoops = new \Whoops\Run;
            // Registramos el manejador "pretty handler"
            $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);

            // Retornamos una nueva respuesta
            return response()->make(
                $whoops->handleException($e),
                method_exists($e, 'getStatusCode') ? $e->getStatusCode() : 500,
                method_exists($e, 'getHeaders') ? $e->getHeaders() : []
            );
        }
        // Si debug == false : retornamos la respuesta para la excepción
        return parent::convertExceptionToResponse($e);
    }

Probando el resultado

Si ingresamos por ejemplo, a una url que no existe, deberíamos ver algo similar a esto:

Whoops! There was an error

Con esto tendrás funcionando el componente Whoops en tu proyecto.

Si tienes algunos otros tips de utilidad que quieras compartir con la comunidad, puedes hacerlo  desde la sección de comentarios, recuerda dejar tu opinión y compartir nuestro contenido en redes sociales.

Material relacionado

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Cómo subir y descargar archivos por FTP en Laravel Lección siguiente Integrar Google Maps en Laravel