grav avanzados, depuración

Depuración y registro

Al desarrollar temas y plugins, a menudo surge la necesidad de mostrar información de depuración. Grav cuenta con potentes capacidades de depuración a través de varias funciones:

Barra de Depuración

Grav incluye una gran herramienta llamada Barra de Depuración que facilita este proceso. Esta característica viene desactivada por defecto, pero puede activarse globalmente o solo para tu entorno de desarrollo mediante el archivo de configuración system.yaml:

debugger:
  enabled: true                        # Activar depurador de Grav y siguientes configuraciones
  provider: debugbar                   # Establecer proveedor como debugbar
  shutdown:
    close_connection: true             # Cerrar conexión antes de llamar a onShutdown(). false para depuración

La primera vez que la actives, la barra de depuración puede aparecer como un pequeño icono de Grav en la parte inferior izquierda de la página. Haz clic en él para mostrar la barra completa.

La PHP Debug Bar sigue proporcionando un tiempo de procesamiento general así como uso de memoria, pero ahora tiene varias pestañas que ofrecen información más detallada.

La primera pestaña es para Mensajes y puedes usarla para ayudar en la depuración de tu proceso de desarrollo en Grav enviando información a esta pestaña desde tu código.

Junto con información de Solicitud, Excepciones y Configuración, también puedes ver un desglose detallado del tiempo de Grav en el panel Línea de Tiempo:

Comando Dump para PHP

Si estás intentando depurar algún código PHP, por ejemplo un plugin personalizado que estés desarrollando, y deseas examinar rápidamente algún objeto o variable, puedes usar el potente comando dump(). Este acepta básicamente cualquier variable PHP válida y mostrará los resultados en un formato bien presentado y coloreado en tu navegador.

Por ejemplo, puedes volcar fácilmente una variable u objeto PHP:

dump($mivariable);

y ver los resultados en tu navegador:

También puedes enviar variables a la pestaña Mensajes de la Barra de Depuración usando la sintaxis:

$this->grav['debugger']->addMessage($mivariable)

Comando Dump para Twig

También puedes mostrar variables Twig desde tus plantillas Twig. Esto se hace de forma similar, pero los resultados se muestran en el panel Mensajes de la Barra de Depuración. Esta característica viene desactivada por defecto, pero puede activarse globalmente o solo para tu entorno de desarrollo mediante el archivo de configuración system.yaml:

twig:
  debug: true                        # Activar depurador Twig

Por ejemplo, puedes volcar fácilmente una variable u objeto Twig:

{{ dump(page.header) }}

y ver los resultados en la Barra de Depuración:

Es posible mostrar múltiples comandos dump al mismo tiempo pero puede resultar confuso distinguirlos. Añade texto estático así:

{{ dump('Salida de page.header:',page.header) }}

Volcar a la consola del navegador desde Twig

Para mostrar variables antes de que una página sea devuelta por Grav o en casos donde no ocurra una recarga de página como cuando se usa AJAX, existe otra alternativa. Usando una sola línea de Javascript cualquier variable puede mostrarse en la consola de desarrollador de tu navegador, por ejemplo:

<script> console.log({{ page.header|json_encode|raw }}) </script>

Luego examina el valor en la consola del navegador:

Visualización de Errores

Nuestra nueva página de visualización de errores proporciona información detallada, trazas de ejecución, e incluso bloques de código relevantes. Esto ayuda a aislar, identificar y resolver errores críticos más rápidamente. Por defecto en Grav, estas están desactivadas, por lo que necesitarás activarlas para aprovechar este útil manejo de errores durante el desarrollo:

errors:
  display: true

Para entornos de producción puedes desactivar la página detallada de errores y mostrar algo más sutil configurando las opciones de errores en tu archivo user/config/system.yaml y confiar en que los errores se registren en un archivo:

errors:
  display: false
  log: true

Registro de Logs

La capacidad de registrar información suele ser útil, y una vez más, Grav nos proporciona una característica de registro simple pero potente. Usa una de las siguientes sintaxis:

$this->grav['log']->info('Mi mensaje informativo');
$this->grav['log']->notice('Mi mensaje de notificación');
$this->grav['log']->debug('Mi mensaje de depuración');
$this->grav['log']->warning('Mi mensaje de advertencia');
$this->grav['log']->error('Mi mensaje de error');
$this->grav['log']->critical('Mi mensaje crítico');
$this->grav['log']->alert('Mi mensaje de alerta');
$this->grav['log']->emergency('¡Emergencia, emergencia, hay una emergencia aquí!');

Todos tus mensajes se añadirán al archivo /logs/grav.log.