Nuevo en Symfony 3.4: Mejores excepciones en la consola
Diseñar los mensajes de las excepciones de programación no es fácil, ya que hay que proporcionar suficiente información para que el usuario descubra rápidamente la causa del error, pero al mismo tiempo no hay que dar demasiada información que pueda abrumar o estresar todavía más al usuario.
En Symfony 3.3 rediseñamos las excepciones en la web y en Symfony 3.4 vamos a hacer lo mismo con las excepciones de la consola. El principal problema de las excepciones actuales es que se centran demasiado en explicar lo que sucedió, olvidando dónde sucedió exactamente. Por ejemplo, mira la siguiente excepción:
[Symfony\Component\Debug\Exception\ContextErrorException] Notice: Undefined variable: b
El error está muy bien explicado e incluso se incluye la clase asociada a la excepción. Sin embargo, ¿podrías decir dónde se ha producido exactamente este error? ¿En qué línea de qué archivo deberías estar mirando para solucionarlo?
Si ejecutas el comando con la opción -v para mostrar más detalles de la
ejecución, sí que ves el archivo y el número de línea. Pero normalmente no añades
esa opción -v
en los comandos, así que tendrías que volver a ejecutarlo para
obtener esa información.
Ejecutar de nuevo el comando puede ser realmente incómodo: a lo mejor el error se produce después de 10 minutos ejecutando un proceso, o solo sucede la primera vez porque faltaba alguna información en la base de datos, o se ejecuta mediante una tarea programada en el Cron.
En Symfony 3.4, la excepción anterior se muestra de la siguiente manera:
In CacheClearCommand.php line 88: Notice: Undefined variable: b
Las excepciones de la consola ahora siempre muestran el archivo y número de línea
exactos en el que se ha producido el error. Además, ya no mostramos por defecto
la clase asociada a la excepción, ya que normalmente no es muy útil (sí que se
muestra cuando se ejecuta el comando con la opción -v
).
La única excepción a este nuevo comportamiento es cuando se produce una excepción interna de la propia consola de Symfony. En este caso no es muy útil mostrar el archivo y línea donde se produce el error, ya que es un archivo interno de Symfony que no puedes tocar. Así que en vez de esto:
In Application.php line 615: Command "foo" is not defined. Did you mean this? app:foo
En Symfony 3.4 seguirás viendo esto:
Command "foo" is not defined. Did you mean this? app:foo
Estas mejoras fueron realizadas por Nicolas Grekas, Arnaud y Yonel Ceruto en los pull requests #24131 y #21414.
Comentarios
Proyectos Symfony destacados
La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.