调试钩子触发了?


9

我对模块开发有些陌生。

有没有办法输出当前在某些节点上运行过的钩子?

可以用xdebug完成吗?

Answers:


9

除非收到致命错误(或黑屏),否则很容易获得在调用特殊钩子时将要调用的模块的列表:

$modules = module_implements($hook);
foreach ($modules as $key =>  $module) {
  $function = $module . '_' . $hook;
  if (!function_exists($function)) {
    unset($modules[$key]);
  }
}
// $modules is now an array containing all the modules that will be invoked by $hook.

您可以使用xDebug之类的工具来跟踪Drupal的流程,但这可能会令人不知所措,特别是如果您不熟悉Drupal。


1
如果您想尝试调试并且不想花费数小时进行设置,则可以尝试Quickstart。它是一台虚拟机,使用drush可以很容易地设置站点,然后将其放入模块中,导入Netbeans并进行调试。
威士忌酒

1
这不是只显示实现特定钩子的所有模块,还是不是所有具有Drupal的钩子都已调用了?稍后是我阅读@chrisjlee的请求的方式。
mpdonadio

1
@MPD不仅显示哪些模块实现了钩子,还显示了调用它们的顺序。如果上下文是在调用模块的钩子之前/之后发生的情况,则上述内容就足够了。如果您想确定是否在执行流程中的某个时刻调用了钩子foo,那么将很难确定,因为Drupal非常复杂。特别是对于新开发人员。我不确定这是否是OP所需要的,但是无论如何它可能比任何xDebug建议都有用。
googletorp
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.