Debug básico con el módulo Devel en Drupal 8

Imagen
Un chico frente a un mac pensando

Saber como depurar (o hacer debug) una aplicación en cualquier lenguaje es algo básico. Drupal nos provee una muy buena herramienta para poder ver que tenemos en las variables que estamos utilizando. Se trata del modulo Devel, el cual es uno de los módulos mas antiguos de la comunidad de Drupal.

Instalar y configurar Devel:

Lo primero que tenemos que hacer, es instalar y descargar el módulo Devel, podemos hacerlo al modo tradicional descargando el modulo y metiéndolo a la carpeta /modules/contrib. Una vez hecho esto, tenemos que ir a la página de los módulos (/admin/modules), y activarlo:

Modulos Devel de Drupal activos

Vamos a activar Devel, Devel kint y Web Profiler y veremos como usar cada uno.

Ahora tenemos que configurarlo, para ello vamos a Configuración -> Desarrollo -> Configuración Devel (/admin/config/development/devel).

Una vez aquí dentro, en la parte inferior tenemos que marcar la opción "Symfony var-dumper" y guardar para aplicar los cambios.

Configuracion de devel.

Ahora ya estamos listos para comenzar a realizar debug a nuestro código.

Debug con Devel:

Esto es lo mas básico, unicamente tendremos que ejecutar la función dpm() en cualquiera lado e introducir dentro la variable, array u objeto que queramos. Vamos a ver un ejemplo de código, y como nos lo muestra Devel.

function nireneko_entity_presave(EntityInterface $entity) {
  dpm('DPM en nireneko');
  dpm($entity, 'Entidad');
}

En este caso estamos utilizando el hook hook_entity_presave, a si que si realizamos la prueba de guardar una entidad (un nodo por ejemplo) podremos ver el resultado:

Output del debug de devel sin deplegar

Y podremos desplegar los arrays y objetos para ver el contenido:

Debug de Devel desplegado en el que se ve el valor de Title

Devel dispone de muchas mas funciones para debug, pero la función dpm() es básicamente la que mas se usa, también disponemos de dd(), el cual nos realizara lo mismo que dpm, pero a un archivo llamado drupal_debug.txt, el cual se almacena en la carpeta temporal. Este es útil cuando necesitamos depurar por ejemplo llamadas AJAX desde el lado de PHP.

Usando Kint en Twig

dpm() de Devel, solamente se puede usar en la parte de PHP, y dentro de las plantillas de twig no podemos usarlo, pero tenemos una alternativa y es usar kint, para ello necesitamos activo el modulo Devel kint (el cual hemos activado al inicio). El uso es exactamente el mismo:

{{ kint(content) }}

Ejecutado Kint en nireneko

El ejemplo anterior, muestra el array "content", esta ejecutado en el archivo node.html.twig de un tema, pero podemos hacerlo en cualquier plantilla twig.

Debemos tener cuidado, ya que consume muchísima memoria, a si que deberíamos evitar ejecutar kint con elementos demasiado grandes. En caso de que tengamos problemas, hay que modificar la configuración de php en memory_limit para ampliar el uso de memoria. Ademas, cuando despleguemos por primera vez kint en el navegador, seguramente nos tarde mucho y parezca que se ha bloqueado, pero es normal ya que muestra todo, a si que tendremos que cerrar los que no queramos y buscar lo que si.

 

Debug con Web Profiler

Esta es una "herencia" de Symfony, esta utilidad no nos permitirá ver el contenido de variables, pero podremos ver que vistas, configuración, eventos, bloques... tenemos en la pagina actual.

Podemos configurar la barra desde su configuración en Configuracion -> Desarrollo -> Configuración Devel -> Web Profiler (/admin/config/development/devel/webprofiler).

Barra por defecto del web profiler

En la imagen podemos ver que la pagina ha devuelto un código 200, ha tardado 3235ms y ha realizado 145 consultas a la base de datos en 49.09ms. Haciendo clic en uno de ellos, accederemos a una pagina con toda la información disponible para visualizarla.

No utilizarlos en producción

Es importante recordar que no tenemos que usar estos módulos de debug en producción, debemos desinstalarlos antes de subir la web a producción, y también eliminar por completo las funciones dpm, dd y kint que hayamos podido utilizar.

Tenemos opciones avanzadas, como xdebug, pero ya son generales de php, no de Drupal. Esto al ser algo básico, nos centramos únicamente en herramientas de Drupal.

Artículos relacionados: