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

Publicada el

15 de septiembre de 2017

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.