Devel
Un conjunto completo de herramientas de desarrollo y depuración para desarrolladores de Drupal, que proporciona funciones para inspección de variables, depuración de entities, edición de configuración, generación de contenido y páginas de administración orientadas al desarrollador.
devel
Install
composer require 'drupal/devel:^5.5'
Overview
El módulo Devel es un kit de herramientas esencial para desarrolladores y constructores de sitios Drupal que proporciona una amplia gama de utilidades de depuración y desarrollo. Ofrece funciones para inspeccionar variables, imprimir salida de depuración, ver información de backtrace y examinar consultas SQL directamente en el navegador.
Las capacidades principales incluyen agregar pestañas de depuración a las entities para inspeccionar sus propiedades internas, un editor de configuración para modificar valores de configuración activos, un editor de variables de estado para gestionar la State API, y páginas de información completas para visualizar servicios del contenedor, routes, events, elements y datos del theme registry.
El módulo se integra con el toolbar de Drupal para acceso rápido a herramientas de desarrollo como limpieza de caché, ejecución de cron y reconstrucción de menús. También incluye un sistema de correo que redirige los emails salientes a archivos para facilitar la depuración durante el desarrollo.
El submódulo acompañante Devel Generate permite la creación masiva de contenido de prueba incluyendo nodes, usuarios, términos de taxonomía, menús, media y blocks personalizados, lo cual es invaluable para poblar entornos de desarrollo y staging con datos de muestra realistas.
Features
- Funciones de depuración para inspeccionar variables: dpm(), dvm(), dpq(), ddebug_backtrace(), ddm()
- Pestañas de depuración de entities agregadas automáticamente a todos los tipos de entity para ver propiedades internas
- Editor de configuración para ver, editar y eliminar objetos de configuración activos
- Editor de estado para ver y modificar variables de la State API de Drupal
- Inspector de servicios del contenedor que muestra todos los servicios y parámetros registrados
- Página de información de routes que muestra todas las routes registradas con detalles
- Página de información de events que lista todos los event listeners en el dispatcher
- Página de información de elements que muestra todas las definiciones de render elements
- Página de información de layouts que muestra los layouts disponibles (cuando layout_discovery está habilitado)
- Visor del theme registry para examinar definiciones de theme hooks
- Visor de sesión que muestra los datos de la sesión actual
- Block y página para cambiar de usuario para suplantar otros usuarios durante pruebas
- Integración con el toolbar con acceso rápido a limpieza de caché, cron y reconstrucción de menú
- Sistema de registro de correo que guarda emails salientes en archivos en lugar de enviarlos
- Funciones de depuración de templates Twig: devel_dump(), devel_message(), devel_breakpoint()
- Manejadores de errores personalizados con visualización de backtrace configurable
- Visualización de machine names en páginas de permisos y módulos
- Depuración de consultas mediante hook_query_TAG_alter con etiqueta 'debug'
- Integración con Symfony VarDumper para salida de variables mejorada
Use Cases
Depuración de variables en el código
Usa dpm($variable) en cualquier parte de tu código para mostrar el contenido de una variable en el área de mensajes. Esto funciona en hooks, controllers, formularios y en cualquier lugar donde se ejecute código de Drupal. Para consultas de base de datos, usa dpq($query) para ver el SQL completo con los argumentos sustituidos. Para trazas de pila, usa ddebug_backtrace() para ver la pila de llamadas.
Depuración en plantillas Twig
Usa {{ devel_dump(variable) }} o {{ dpm(variable) }} en plantillas Twig para mostrar variables. Usa {{ devel_dump() }} sin argumentos para ver todas las variables de contexto disponibles. Usa {{ devel_breakpoint() }} para establecer un punto de interrupción para depuración con XDebug.
Inspección de datos internos de Entity
Visita cualquier entity (node, user, term, etc.) y haz clic en la pestaña 'Devel' para ver sus propiedades internas, valores de field y métodos. Para entities sin URLs canónicas, usa las rutas /devel/{entity_type}/{entity_id}.
Pruebas como diferentes usuarios
Coloca el block Switch User en una región o visita /devel/switch-user para cambiar rápidamente entre cuentas de usuario y probar permisos y control de acceso sin cerrar sesión.
Depuración de funcionalidad de correo electrónico
Configura Devel Mail Log como tu sistema de correo en settings.php para redirigir todos los correos salientes a archivos en el directorio temporal. Esto te permite verificar el contenido de los correos sin enviar mensajes realmente durante el desarrollo.
Población del entorno de desarrollo
Usa Devel Generate para poblar rápidamente un sitio de desarrollo con contenido realista. Genera cientos de nodes, users, terms y menus con un solo comando como 'drush genc 500 --bundles=article,page'.
Exploración de servicios del contenedor
Visita /devel/container/service para ver todos los services registrados, sus clases, dependencias y tags. Haz clic en cualquier service para ver información detallada. Usa 'drush dcs plugin.manager' para listar services que coincidan con un prefijo.
Búsqueda de información de rutas
Visita /devel/routes para ver todas las routes registradas con sus paths, controllers, requisitos de acceso y opciones. Usa el enlace de información de ruta actual para ver detalles sobre la route que maneja la página actual.
Depuración de Hooks y Events
Usa 'drush fn-hook cron' para ver todas las implementaciones de hook_cron y abrir una en tu editor. Usa 'drush fn-event kernel.request' para ver todos los listeners de un event.
Gestión de configuración durante el desarrollo
Usa el Config Editor en /devel/config para ver y editar objetos de configuración activos directamente. Esto es útil para probar cambios de configuración sin exportar/importar archivos YAML.
Tips
- Usa dpm($variable) para depuración rápida - devuelve la entrada para que puedas encadenarlo: return dpm($result);
- Añade $query->addTag('debug') a las entity queries para mostrar automáticamente el SQL usando dpq()
- El archivo de registro de depuración (ddm()) persiste entre peticiones y es útil para depurar AJAX, cron y procesos en segundo plano
- Activa 'rebuild_theme' durante el desarrollo activo de themes pero desactívalo para desarrollo normal para mejorar el rendimiento
- Usa comandos de Drush para generar grandes cantidades de contenido - son más rápidos que la interfaz web y soportan procesamiento por lotes
- El block Switch User puede colocarse en una barra lateral para acceso rápido durante las pruebas, incluso en páginas que no son de administración
- Para sitios en producción, asegúrate de que solo desarrolladores de confianza tengan el permiso 'access devel information' ya que puede exponer datos sensibles
- Usa el editor de state para probar rápidamente funcionalidades que dependen de valores de state sin escribir código
- Las páginas de Container Info son invaluables para entender cómo están conectados los services
- Instala drupal/navigation_extra_tools para una integración perfecta con el módulo Navigation del core
Technical Details
Admin Pages 21
/admin/config/development/devel
Configura los ajustes principales del módulo Devel, incluyendo la selección del volcador de variables, manejadores de errores y opciones de visualización.
/admin/config/development/devel/toolbar
Configura qué elementos del menú están siempre visibles en la bandeja de la barra de herramientas de Devel.
/devel/config/{filter}
Explora, filtra y edita objetos de configuración activos en el sistema. Permite la modificación directa de valores de configuración en formato YAML.
/devel/state
Ver y editar variables de la API State de Drupal. Muestra todas las variables de estado con sus valores actuales y proporciona enlaces de edición.
/devel/reinstall
Desinstala y reinstala los módulos seleccionados. Esto eliminará las tablas y configuración del módulo, ejecutará hook_uninstall() y hook_install(), y establecerá la versión del esquema a la actualización más reciente.
/devel/container/service
Muestra todos los servicios registrados en el contenedor de servicios de Symfony con información detallada incluyendo clase, argumentos y etiquetas.
/devel/container/parameter
Muestra todos los parámetros registrados en el contenedor de servicios de Symfony.
/devel/routes
Muestra todas las rutas registradas en el sitio incluyendo ruta, controlador, requisitos y opciones recopilados de archivos .routing.yml y suscriptores de rutas.
/devel/events
Muestra todos los eventos y sus oyentes registrados en el despachador de eventos de Symfony.
/devel/elements
Muestra todos los tipos de elementos de renderizado disponibles en el sistema con sus propiedades y valores predeterminados.
/devel/entity/info
Muestra información sobre todos los tipos de entidad incluyendo sus manejadores, claves y enlaces.
/devel/field/info
Muestra información sobre almacenamiento de campos, instancias de campos, bundles, tipos de campos, formateadores y widgets.
/devel/theme/registry
Muestra el registro completo de temas con todas las definiciones de hooks de tema.
/devel/session
Muestra el contenido de la variable de sesión PHP del usuario actual.
/devel/layouts
Muestra todos los diseños disponibles a través de la API de Layout (requiere el módulo layout_discovery).
/devel/switch-user
Proporciona un formulario para buscar y cambiar a otra cuenta de usuario para propósitos de prueba.
/admin/config/development/generate/content
Genera masivamente nodos de prueba con tipos de contenido, autores, comentarios y varias opciones configurables.
/admin/config/development/generate/user
Genera masivamente cuentas de usuario de prueba con roles y opciones configurables.
/admin/config/development/generate/term
Genera masivamente términos de taxonomía con vocabulario, profundidad y opciones de traducción configurables.
/admin/config/development/generate/menu
Genera masivamente menús y enlaces de menú con profundidad y tipos de enlace configurables.
/admin/config/development/generate/media
Genera masivamente entidades de medios con tipos de medios y opciones configurables.
Permissions 3
Hooks 2
hook_devel_dumper_info_alter
Modifica la información del plugin devel dumper declarada por otros módulos.
hook_devel_generate_info_alter
Modifica las propiedades existentes de los plugins DevelGenerate.
Drush Commands 12
drush devel:hook <hook>
Lista las implementaciones de un hook dado y opcionalmente abre una en tu editor.
drush devel:event <event>
Lista los listeners de un evento dado y opcionalmente abre uno en tu editor.
drush devel:services [prefix]
Obtiene una lista de servicios de contenedor disponibles, opcionalmente filtrada por prefijo.
drush devel:uuid
Genera un Identificador Único Universal (UUID).
drush devel:reinstall <modules>
Desinstala y reinstala los módulos especificados.
drush devel-generate:content [num] [max_comments]
Genera contenido de prueba (nodes) con comentarios opcionales.
drush devel-generate:users [num]
Genera cuentas de usuario de prueba.
drush devel-generate:terms [num]
Genera términos de taxonomía.
drush devel-generate:vocabs [num]
Genera vocabularios de taxonomía.
drush devel-generate:menus [num_menus] [num_links]
Genera menús y enlaces de menú.
drush devel-generate:media [num]
Genera entidades de media.
drush devel-generate:block-content [num]
Genera entidades de contenido de bloque personalizadas.
Troubleshooting 7
Asegúrate de tener el permiso 'Access developer information'. También verifica que la configuración de reporte de errores en /admin/config/development/logging permita mostrar errores.
Las funciones de depuración de Twig requieren que twig.config.debug sea TRUE. Habilita esto en development.services.yml y reconstruye el contenedor. Las funciones no devolverán nada si el modo de depuración está desactivado.
Asegúrate de tener el permiso 'Switch users'. El block muestra usuarios activos recientemente - si hay pocos usuarios, aumenta el tamaño de la lista en la configuración del block.
La población de fields usa FieldItemInterface::generateSampleValue(). Si un tipo de field no implementa este método correctamente, los valores no se generarán. Usa --skip-fields para excluir fields problemáticos.
Puede que tengas múltiples manejadores de errores seleccionados. El manejador 'Standard Drupal' y los manejadores de backtrace pueden mostrar mensajes ambos. Selecciona solo los manejadores que necesites.
Asegúrate de haber configurado el sistema de correo en settings.php: $config['system.mail']['interface']['default'] = 'devel_mail_log'; y que debug_mail_directory tenga permisos de escritura.
El registro de theme puede ser muy grande. Esto es normal - la página muestra toda la información de theme hooks que puede ser sustancial en sitios complejos.
Security Notes 7
- El permiso 'access devel information' otorga acceso a datos internos sensibles incluyendo configuración, state, datos de sesión y services del contenedor. Solo concédelo a desarrolladores de confianza.
- El permiso 'switch users' permite suplantar a CUALQUIER usuario incluyendo administradores. Esto solo debe concederse en sitios de desarrollo/staging o a usuarios altamente confiables.
- Nunca habilites el módulo Devel en sitios de producción a menos que sea absolutamente necesario. Si es requerido, limita estrictamente los permisos.
- Los editores de Config y State permiten la modificación directa de configuraciones del sistema - el mal uso puede romper el sitio.
- La salida de depuración (dpm, etc.) puede exponer datos sensibles si accidentalmente se deja en código desplegado a producción.
- La función de registro de correo escribe emails a archivos - asegúrate de que el directorio no sea accesible públicamente.
- Las operaciones de Devel Generate eliminan contenido cuando se usa la opción 'kill' - usa precaución en sitios con contenido real.