A la hora de desarrollar es imprescindible poder saber con que valores estamos trabajando, para eso tenemos que hacer debug, existen varias opciones y una de las mejores es utilizar Xdebug, pero si no disponemos de ella, Drupal nos provee un maravilloso modulo llamado Devel.
Con Devel vamos a tener un dumper para poder ver lo que contienen las variables, arrays, y lo mas importante, los objetos, y es que utiliza el variable dumper de Symfony para mostrarnos información de una manera sencilla y clara.
Instalar y configurar Devel
Lo primero de todo, es instalar Devel, para ello lo mejor es utilizar composer:
$ composer require drupal/devel --dev
De esta manera tendremos devel descargado, es importante la opción –dev ya que con ella le indicamos a composer que va a ser una dependencia de desarrollo, no de producción.
Una vez descargado, procedemos a la instalación, y es también muy simple, únicamente debemos activar el módulo:
Una ves instalado vamos a configurarlo, que es muy sencillo, vamos a “Configuracion -> Desarrollo -> Devel Settings”. Aquí dentro vamos a la sección del dumper y lo cambiamos por el de Symfony. Y ya está configurado devel, aunque esta configuracion es mas una preferencia que otra cosa.
He marcado en el recuadro rojo la casilla de “Debug Log File”, recordad esta casilla porque será útil más tarde.
Como utilizar Devel para el debug
Ahora que ya lo tenemos instalado y configurado, podemos comenzar a usarlo, y es realmente sencillo, únicamente tenemos que utilizar la función “dpm”:
/**
* Implements hook_entity_presave().
*/
function escueladrupal_entity_presave(\Drupal\Core\Entity\EntityInterface $entity) {
dpm($entity);
}
Si creamos un nodo (por ejemplo) teniendo el dpm en el hook_entity_presave, lo que devel hará es mostrarnos su contenido de la siguiente manera:
Ahí podemos ver, por ejemplo, que se ha creado un nodo y devel nos muestra el objeto Node, y podemos navegar por los valores hasta el título del nodo.
Esto parece muy útil, pero si ponemos varios dpm por nuestro código, identificar cual es cual, puede ser complicado, de modo que dpm admite un parámetro extra para que indiquemos el “nombre” que tendrá, en este caso yo he puesto el nombre “mi entidad”:
/**
* Implements hook_entity_presave().
*/
function escueladrupal_entity_presave(\Drupal\Core\Entity\EntityInterface $entity) {
dpm($entity, 'mi entidad');
}
Al ejecutar eso, veremos un mensaje con el nombre que indiquemos, esto nos facilita mucho la vida a la hora de poder identificar un dump concreto si hacemos muchos:
Guardando el dump en archivos
Existe otra función que nos puede ser de mucha utilidad en algunos casos, y es la función “ddm”, y es que esta, lo que hará será hacer el dump de lo que indiquemos, a un archivo, su uso es idéntico.
/**
* Implements hook_entity_presave().
*/
function escueladrupal_entity_presave(\Drupal\Core\Entity\EntityInterface $entity) {
ddm('test', 'mi entidad');
}
Y al ejecutarlo nos lo almacenara en un archivo:
¿Pero claro, donde esta ese archivo? ¿Recordáis la configuracion que se hizo, y la caja de texto que marqué en rojo? Pues ahí es donde se indica la ruta y nombre del archivo, por defecto el archivo se llama “Drupal_debug.txt” y se almacena en la carpeta temporal de nuestro Drupal, podemos cambiar la ubicación desde la configuracion que hemos visto antes.
Por último, os recomiendo que reviséis el archivo devel.module, ya que en ese archivo hay listadas muchas funciones cada una con una utilidad diferente.
Información extra en entidades
La última opción para los dumps, podemos verla si entramos a un nodo, y es que en la parte superior en las opciones, podremos ver una nueva llamada “Devel”:
Aquí podemos ver 3 dumps diferentes, cada uno muestra un tipo de información diferente, como el objeto del tipo de entidad que se va a mostrar (en la tab “Definicion”), el render array del nodo (en la tab “Visualizar”) y por ultimo el objeto que se esta visualizando (en la tab “Cargar”)
Permisos
También nos ofrece un par de permisos, y uno de ellos nos sirve para que distintos usuarios puedan ver los dumps, es algo muy simple, pero que nos puede venir bien si hacemos pruebas con usuarios con permisos que no sean de administración.
Debug en Twig
El módulo Devel nos permite ver de manera sencilla los valores, pero a pesar de que dispone de la función “devel_dump” para poner utilizarla den Twig, personalmente nunca me ha funcionado, a si que tenemos que utilizar otra herramienta para trabajar con Twig, a si que llega el momento de dar el salto a otro modulo, este es Twig Tweak, vamos a descargarlo he instalarlo.
Para descargarlo, usaremos composer, he instalarlo, pues ya os imagináis que, sera desde la interfaz:
$ composer require drupal/twig_tweak
Una vez que lo hayamos descargado he instalado, vamos a ver como se utiliza, y es que tiene 2 funciones para utilizar en Twig (realmente 1, solo que la segunda es una abreviación):
La primera es “drupal_dump”, y lo que hará será mostrarnos el contenido de la variable de twig que le indiquemos; si por ejemplo en el node.html.twig le indicamos que queremos ver que contiene la variable “content” de la siguiente manera, podremos ver el dump:
{{ drupal_dump(content) }}
La segunda es “dd”, y hace exactamente lo mismo, solo que es más corta. Ademas, si a “dd” o “Drupal_dump” no les pasamos ningún parámetro, nos mostraran todas las variables que están disponibles en ese archivo Twig.
A tener en cuenta
Para mostrar información de los dump Devel utiliza el sistema de mensajes de Drupal, de modo que debemos tener visible el bloque que los muestra, si no, no veremos ningún mensaje. El nombre del bloque en castellano es “Mensajes de estado”. Twig tweak no hace uso de los mensajes, muestra directamente en plantilla.
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 y dd que hayamos podido utilizar.
Tenemos opciones avanzadas, como xdebug, pero ya son generales de php, no de Drupal. Aqui nos hemos centramos únicamente en herramientas de Drupal.
Me metí en la aventura de Drupal con la versión 6, y aquí estoy, 10 años después, escribiendo articulos y haciendo videos sobre Drupal, quien me lo iba a decir. Aunque he probado otros framworks y cms, me quedo con Drupal de lejos, pero Symfony y Django estan entre mis favoritos. Aficionado a la montaña, la bicicleta, y el comer, de eso que no falte.