Siguen las novedades para lo que será Laravel 6, en esta ocasión se dio a conocer la nueva pagina de error predeterminada para Laravel: Ignition.
En este artículo te voy a contar todo a cerca de Ignition.
¿Qué es Ignition?
Esta maravillosa pagina de error fue creada por el mismo equipo de desarrollo que creo Laravel Websockets y es de código abierto.
¿Se acuerdan de la pagina de error Whoops de Laravel 5.x? En ella se mostraba mucha información útil cuando nuestra aplicación producía un error. Lo malo de Whoops era que mostraba información agnóstica al Framework.
En Laravel 6, Ignition sería el nuevo Whoops pero con un diseño elegante, personalizable, con más características y al ser dedicado a Laravel, podremos hacer cosas geniales! Aquí una captura de pantalla de Ignition:
Ignition en detalle
Continuando con la comparación contra Whoops. Si teníamos un error en nuestras vistas, así es como lo mostraba Whoops:
Por un lado, no se mostraba el mensaje de ErrorException completamente, teníamos que posicionar el mouse por encima para leer el mensaje completo. Otro problema más era que, en el tracking de archivos, no mostraba el nombre del archivo Blade exactamente, si no que nos mostraba el nombre del archivo Blade compilado. Y esto la verdad que era un dolor de cabeza para saber que archivo Blade estaba produciendo el error.
Lo bueno de que Ignition sea especifico de Laravel es que puede «hablar» con el Framework y así mostrarnos específicamente cual es el path del archivo de Blade que esta produciendo el error y, no solo eso, también nos muestra la vista Blade sin compilar.
Además, el mensaje de la Exception se muestra completamente ya que tiene más lugar al estar en la parte superior.
Integración con tu editor de texto
Otra cosa que me pareció genial es que, si hacemos click en el icono del lápiz que esta en la ruta del archivo Blade, se nos abrirá automáticamente PhpStorm en el archivo Blade que produjo el error 👏!
Pero si no usas PhpStorm (vaya uno a saber porque…) y utilizas otro editor como Visual Studio Code, Sublime Text o Notepad++ (🤮), Ignition no discrimina y te permite configurar tu editor de texto favorito en el archivo de configuración de Ignition.
Integración con Telescope
Siguiendo con las cosas geniales de Ignition, si vemos en la imagen anterior de Ignition podemos ver arriba a la derecha un pequeño enlace que dice «Telescope», si haces click en ese enlace te llevará a la Exception en Telescope con toda la información que sabemos que nos brinda esa herramienta.
Si no sabes que es Telescope, en Laravel Tip tenemos un articulo para que sepas que es y como se usa: https://www.laraveltip.com/guia-completa-para-utilizar-laravel-telescope/
Ignition en Modo Oscuro
Todos los programadores tenemos la manía de poner todo en modo oscuro. La gente detrás de Ignition saben que tenemos ojitos de princesa y por eso nos dieron la versión «Dark Mode».
Las pestañas de Ignition
Veamos cada una de las pestañas que aparecen en Ignition.
La pestaña de Request
Al lado de la pestaña «Stack trace», tenemos la pestaña que pertenece a toda la información que podemos sacar de la request que se ha producido. Es bastante parecida a la que traía Whoops.
La pestaña de App
Acá se pone mas interesante la cosa. Una vez más Ignition utiliza esa «comunicación» que tiene con Laravel para mostrarnos información más especifica. Primero nos muestra información sobre la ruta donde ocurrió la excepción. Esto incluye el Controller que se ejecutó como así también el nombre de la ruta.
Otra característica increíble es que nos da la capacidad de inspeccionar los parámetros de la ruta.
Supongamos que tenemos una definición de ruta como esta:
Route::get('/posts/{post}', function (Post $post) {
//
});
Cuando se produzca un error en esta ruta, Ignition nos mostrará el toArray()
de ese modelo post
. Lo mismo ocurrirá con cualquier tipo de parámetro en las rutas, nos mostrará el valor de todos los parámetros de la ruta. De esta forma podemos ver la información que recibió Laravel para esta ruta en particular.
No solo eso, también nos mostrará la lista de middlewares que se ejecutaron en esa solicitud.
Si una view produjo el error entonces, en la sección «View», podremos ver los datos que se pasaron a esa vista.
La pestaña User
La pestaña «User» nos muestra más información sobre quién está usando la aplicación y qué navegador se usa.
La pestaña Contexto
Si nuestro código se encuentra en un repositorio de git, entonces la pestaña «Context» nos mostrará información sobre el repo, como así también, qué versiones de PHP y Laravel estamos utilizando.
La pestaña Debug
En esta pestaña se mostrarán cosas que ocurrieron antes de que ocurriera la excepción. Cosas como queries a la base de datos, logs, dump. En los dump, también se mostrará el nombre del archivo donde pusiste ese dump
. En este caso también podremos hacer click en el icono del lápiz e Ignition nos llevará directamente a ese archivo y al número de línea correcto en tu editor favorito.
Sugerencias de soluciones
Agárrate de los pantalones cuando te diga que Ignition te sugiere soluciones para tus errores! ¿Cómo es esto? Por ejemplo, supongamos que te falta importar una clase y eso es lo que produjo el error.
Entonces Ignition ve que la excepción es sobre una clase que no se encuentra. Intentará averiguar si hay una clase con ese nombre en otro namespace. Si hay uno, te sugerirá importarlo.
Ignition es bastante inteligente y sabe que sugerirnos en los problemas comunes que tenemos en nuestra aplicación. Por ejemplo, aquí hay uno para cuando no se encuentra una vista Blade.
Ejecutar Sugerencias
Si casi mas te orinas encima con la sugerencia de errores, anda corriendo a buscar una pélela cuando te diga que Ignition puede ejecutar las sugerencias que te ofreció 🤯!
Por ejemplo, cuando te olvides de ejecutar php artisan key:generate
el error se verá así:
Si hace click en el botón «Generate app key», Ignition ejecutará el comando artisan en segundo plano por nosotros.
Una vez que actualices la pagina, tu aplicación ya no mostrará el error.
Lo mismo ocurrirá con las migraciones, si te olvidaste de ejecutar alguna migración, Ignition te ofrecerá ejecutarlas por vos.
Haciendo Ignition más inteligente
El gran beneficio de que Ignition sea de código abierto es que nos permite crear nuestras propias «sugerencias y ejecuciones» y dotarlo de más inteligencia.
Por ejemplo, podríamos crear nuestras propias «soluciones» para excepciones de PHP o incluso excepciones de terceros donde no tenemos control del código.
Para hacer esto, Ignition nos brinda los «Solution Providers». Los Solution Providers son clases que pueden conectarse al proceso de búsqueda de soluciones en Ignition. Cuando se produce una excepción e Ignition la recibe, se puede llamar al Solution Providers para que devuelva una o varias soluciones posibles para esa excepción.
Así es como se ve un solution providers :
use Throwable;
use RuntimeException;
use Facade\IgnitionContracts\Solution;
use Facade\Ignition\Solutions\GenerateAppKeySolution;
use Facade\IgnitionContracts\HasSolutionForThrowable;
class MissingAppKeySolutionProvider implements HasSolutionForThrowable
{
public function canSolve(Throwable $throwable): bool
{
if (! $throwable instanceof RuntimeException) {
return false;
}
return $throwable->getMessage() === 'No application encryption key has been specified.';
}
public function getSolutions(Throwable $throwable): array
{
return [
new GenerateAppKeySolution()
];
}
}
Y se debe registrar en un ServiceProvider para que funcione, por ejemplo:
namespace App\Providers;
use App\Solutions\GenerateAppKeySolution;
use Facade\IgnitionContracts\SolutionProviderRepository;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register(SolutionProviderRepository $solutionProviderRepository)
{
$solutionProviderRepository->registerSolutionProvider(GenerateAppKeySolution::class);
}
}
Con los SolutionProviders podemos seguir mejorando Ignition. ¿Te imaginas los nuevos paquetes que sacara la comunidad para Ignition? Va a ser increíble!
Compartir errores
Me quedo pendiente comentar la pestaña Share de Ignition. Deje este pestaña para el final del artículo ya que se merece un párrafo aparte.
Esta pestaña nos permite compartir nuestro error con el servicio Flare, ¿y que es Flare? Flare es un servicio que también saldrá en Laravel 6 y es un monitoreador de excepciones, muy parecido a Sentry.io o Bugsnag.
Por lo tanto, en la pestaña Share tendremos la capacidad de compartir nuestros errores con otros miembros del equipo. Si hacemos click en dicha pestaña, veremos algo así:
Al hacer click en el botón Share, el error será enviado al servicio y nos devolverá un enlace para compartir a quien queramos y así es como se verá el enlace compartido.
¿Y que pasará con los que todavía tenemos Laravel 5.x?
Bueno, quédate tranquilo porque Ignition ya esta disponible para las versiones de Laravel 5.5 en adelante.
Podes ver la guía de instalación desde la pagina oficial: https://flareapp.io/docs/ignition-for-laravel/installation.
Conclusión
Creo que esta característica de Laravel 6 es una de las mejores que se hayan anunciado hasta ahora. Sin dudas, Ignition va a cambiar el juego para el tratado de errores en nuestras aplicaciones y abre un gran abanico para que la comunidad de Laravel continúe haciendo más grande al framework.
Espero que las próximas características de Laravel 6 sigan siendo tan buenas como esta. Y, coméntame, ¿a ti que te ha parecido Ignition?
Si te gusto este artículo, házmelo saber con un like, un comentario o una compartida en tus redes sociales. Nos vemos en el próximo Laravel Tip 😉🤙.
Buen día.
Excelente artículo y que genial que el equipo de Laravel haya agregado esta gran herramienta.
Aunque me surgió una duda mientras leía, ¿Recomiendas arduamente el uso de PhpStorm? y si es así, ¿Por qué y qué tiene mejor Vs. otros IDE’s?
Saludos 😀
Hola Uriel, cómo estás? Si, lo recomiendo totalmente. Con respecto a que tiene mejor que otros IDEs no te lo podría decir porque el único otro que use fue NetBeans y fue cuando recién empezaba a programar. Pero, por lo que me acuerdo, es muy parecido a phpstorm.
¡Genial!
No estaría mal que hicieras un articulo sobre las bondades de PhpStorm, Pues sino me equivoco es de pago y no se que ventajas sobre los IDE’s gratuitos o de código libre tenga.
Saludos 😀
Si, lo tengo en la lista de pendientes.
PHP Storm es una solucion super completa, un IDE con muchas funciones avanzadas.
Pero ten en cuanta que hay muchas variables, por ejemplo yo no lo utilizo por que en mi computadora el rendimiento no era muy bueno.
Por ejemplo con Visual Studio Code mas los plugins que instalo, me parece que es mas que suficiente para trabajar comodamente.
Aveces queremos tener lo mas avanzado pero terminamos utilizando solo el 10 o 5% de las funcionalidades, por esta razon PHPStorm lo vi demasiado cargado para lo que yo necesitaba.
Te dejo ese consejo para que lo tomes en cuenta, aveces no depende del editor, si no de tus necesidades.
Es como la famosa pregunta, quien es mejor Android o IOs?
Entiendo tu punto Zarkys, pero no lo veo como un tema de necesidades. Lo veo más como un tema de productividad.
Por otro lado, si tenemos una buena herramienta y solo utilizamos el 5% o 10%, la culpa es nuestra, no del IDE (lo mismo podría ocurrir con una persona que utiliza el Bloc de Notas para programar y viene otra persona que le recomienda VS Code).
Creo que VS Code tiene un gran marketing, como lo tuvo en su momento Sublime Text y cuando comenzamos a programar es fácil caer en estos editores porque todo el mundo los usa. Pero cuando decidís dar un paso mas allá y utilizas un IDE con sus funcionalidades, no volves mas a un editor de código.
Lo digo con conocimiento de causa. Cuando empece a programar me dijeron que usara NetBeans y me pareció tan completo que no lo entendía. Me pase a Sublime Text y estuve años utilizándolo hasta cuando me recomendaron usar PhpStorm. Y, al tener mas conocimientos de programación y de las necesidades que yo mismo tenia y el mismo IDE me las solucionaba, no volví más a un editor de código.
Próximamente voy a escribir un artículo sobre las mejores cosas que tiene PhpStorm y lo que podes hacer con él para que se entienda un poco más el punto de vista de los que decimos que un IDE no se compara con un editor de código.
Saludos bro y muchas gracias por compartir tu opinión.