logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动
03/10/2025, by Ivan

Twig 模板引擎提供了一个调试工具。

Drupal 8 的实现还添加了一个额外的工具,可以帮助你找到输出标记的模板

警告:启用 Twig 调试可能会破坏站点的某些部分,尤其是 Views。请查看此问题

启用调试

你可以在 sites/default/services.yml 中启用 Twig 调试。

将 debug 变量设置为 true,然后清除缓存。

parameters:
  twig.config:
    debug: true 
  • 如果 services.yml 尚不存在,请将 default.services.yml 复制为 services.yml
  • 如果 Drupal 已经安装,可能需要临时更改 sites/default 目录的权限以允许写入。
  • 如何更改目录权限
  • 在创建并编辑 services.yml 之后,请将权限改回以锁定 sites/default 目录。

检查调试

如果你使用 Firefox 的 Firebug,请确保“显示注释”(Show Comments) 已启用,或者直接查看页面源代码:

twig-debug

自动重新加载

Twig 模板会被编译成磁盘上的 PHP 类以提高性能,但这意味着默认情况下模板不会在更改时自动更新。不要在生产环境中启用此功能

要手动重建模板,请运行 drush cr。为了在开发时节省时间,可以通过在 services.yml 中设置 twig.config.auto_reload: true 来启用自动重新加载(默认情况下,当 twig.config.debug: true 时,自动重新加载会启用)。

更多信息请参阅 https://drupal.org/node/1903374

查看变量

查看变量的最佳方法是使用 Xdebug。

如果你使用下面提到的非 Xdebug 方法,会遇到大量递归渲染操作,可能生成一堆对你无用的信息。

最常推荐的方法是使用 PHPstorm 与 Xdebug,因为配置最容易,不过几乎所有 IDE 都有 Xdebug 插件。如果你需要一个免费且轻量的编辑器,微软的 VSCode 是一个开源选项,它有 PHP 和 Xdebug 插件。

配置 Xdebug

Xdebug 的配置可能比较复杂,所以一定要阅读你 IDE 插件的说明,并查看 Xdebug 的文档。单纯依赖网上的说明和错误报告没用,如果你针对的是错误的环境(例如 Xdebug 在 Vagrant、Virtualbox 或 Docker 中),你可能需要“远程”连接的配置:https://xdebug.org/docs/remote

Drupal.org 提供了针对不同编辑器的 Xdebug 指南,可以在这里找到:https://www.drupal.org/docs/develop/development-tools/xdebug-debugger

使用 Xdebug 时:

有三种方式可以在 Twig 模板中设置断点,让你的 IDE 显示 PHP 环境中的变量和其他状态信息:

  • 使用 PHPStorm 的 Twig 调试新功能(博客文档)。不需要 Drupal 模块。
  • 使用 Devel 模块
{{ devel_breakpoint() }}
  • 使用 Twig Xdebug 模块
{{ breakpoint() }}

如果你无法安装 Xdebug …

……继续往下读,祝你好运。

{{ dump() }}
{{ dump(variable_name) }}

可用的变量列表(顶层):

{{ dump(_context|keys) }}

如果你有 Devel kint 子模块(需要用 Composer 的 require-dev 安装:composer require --dev drupal/devel 1.0-alpha1,然后用 Drush 安装:drush -y en kint),你可以更友好地查看可用的变量:

{{ kint() }}

很有可能当渲染结果很大时,kint 会让你的浏览器卡死。这种情况下,以下模块可能更适合你:

或者你可以使用 Vardumper Twig 模块,它在 twig 中提供 Vardumper。你可以更清晰地查看 twig 中可用的变量:

{{ dump() }}
{{ dump(variable_name) }}
{{ vardumper() }}
{{ vardumper(variable_name) }}

……不过也要考虑花上一两个小时让 Xdebug 正常运行,这会让你的生活轻松很多,因为你需要知道可以使用哪些变量。

如果你使用了错误的范式 …

如果你在模板中写了很多逻辑代码,你应该考虑是否真的需要在这一层做复杂的操作。比如:是否更适合复制一个已有的字段格式化插件文件到自定义模块(保持相同的路径结构),然后仅仅修改注解(头部注释,也叫插件名)和 PHP/HTML 代码,在那里实现你的需求。Drupal 8 的插件就是一些位于特定文件夹中的单独文件,使用起来非常简单。

更多调试选项可见 下一节