关于 drupal-debugging
面向 Drupal 开发者的调试技能,涵盖 Drush 日志、PHP 与 Twig 检查、缓存、服务、模块及通过 DDEV 使用 XDebug,整理常见问题的诊断命令与检查方法。
主要功能
- 01筛选并查看 Drush 日志
- 02在 Drupal 环境中执行 PHP
- 03调试 Twig 模板及建议
- 04检查服务、模块和钩子
- 05清理缓存并检查缓存响应头
- 06通过 DDEV 管理 XDebug
适用场景
- 01追踪 Drupal 日志中的错误
- 02检查服务或类是否加载
- 03查明 Twig 模板未生效的原因
- 04排查缓存和钩子行为
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ edutrul/ drupal-ai --skill drupal-debugging安装后在 Claude Code 中输入/drupal-debugging确认已加载。
附带文件README.md
详细介绍
Drupal 调试
Drush 日志监视
# Watch all errors
ddev drush ws --severity=error
# Last 20 entries
ddev drush ws --severity=error --count=20
# Watch all log levels
ddev drush ws --count=50
# Specific type
ddev drush ws --type=php --count=20
PHP 内联调试
# Run PHP in Drupal context
ddev drush php:eval "var_dump(\Drupal::config('my_module.settings')->getRawData());"
# Check if service exists
ddev drush php:eval "var_dump(\Drupal::hasService('my_module.my_service'));"
# Check class autoloading
ddev drush php:eval "class_exists('Drupal\my_module\Service\MyService') ? print 'Found' : print 'Not found';"
# Inspect an entity
ddev drush php:eval "
\$node = \Drupal::entityTypeManager()->getStorage('node')->load(1);
print_r(\$node->toArray());
"
Twig 调试
在 sites/default/services.yml 中启用:
parameters:
twig.config:
debug: true
auto_reload: true
cache: false
然后在模板中:
{{ dump(content) }}
{{ dump(node) }}
{{ dump(_context|keys) }}
源代码中的 HTML 注释会显示模板建议:
Devel 模块
# Install devel
composer require drupal/devel
ddev drush en devel -y
在 PHP 中:
// Dump and die
dpm($variable); // Krumo output in message area
ksm($variable); // Krumo output (devel module)
dvm($variable); // Var dump
// Krumo (in Twig via Devel)
// {{ devel_dump(node) }}
缓存调试
# Clear all caches
ddev drush cr
# Rebuild theme registry only
ddev drush php:eval "\Drupal::service('theme.registry')->reset();"
# Check cache hit for a page (Drupal page cache)
# Look for X-Drupal-Cache: HIT in response headers
curl -I https://my-project.ddev.site/
# Check Big Pipe and render cache
ddev drush state:get drupal.maintenance_mode
服务容器调试
# List all services matching a pattern
ddev drush devel:services | grep my_module
# List all services
ddev drush devel:services
# Check container definition
ddev drush php:eval "
\$def = \Drupal::getContainer()->getDefinition('my_module.my_service');
var_dump(\$def);
"
模块/Hook 调试
# List all enabled modules
ddev drush pm:list --status=enabled
# Check which modules implement a hook
ddev drush php:eval "
\$modules = \Drupal::moduleHandler()->getImplementations('form_alter');
print implode(', ', \$modules);
"
# Check module info
ddev drush pm:info my_module
常见问题及解决方案
| 问题 | 解决方案 |
|---|---|
| 找不到类 | 检查命名空间和 .info.yml 中的 PSR-4 配置,运行 composer dump-autoload |
| 找不到服务 | 检查 services.yml 语法,运行 ddev drush cr |
| 未使用模板 | 启用 Twig 调试,检查 HTML 注释中的模板建议 |
| Hook 未触发 | 检查类是否已在 services.yml 中注册,并验证 Hook 属性 |
| 配置未保存 | 检查 config/schema/ 中是否存在配置架构 |
| 迁移失败 | 运行 ddev drush ws 查看详情,并检查字段映射 |
使用 DDEV 和 XDebug
# Enable XDebug
ddev xdebug on
# Disable XDebug (performance)
ddev xdebug off
# Check XDebug status
ddev xdebug status
将 IDE(PHPStorm)配置为监听端口 9003。
评论
支持 Markdown