如何在Mediawiki扩展中跟踪自定义挂钩事件的源定义?

时间:2018-03-12 15:13:23

标签: mediawiki mediawiki-extensions

以下是一个例子:

https://phabricator.wikimedia.org/diffusion/EPFM/browse/master/?grep=BeforeFreeTextSubst

一个Mediawiki扩展,其中Hooks :: run(' PageForms :: BeforeFreeTextSubst',...)被调用,但没有其他记录或跟踪它定义的位置。如果有一些字符串/名称映射到函数,它将在其他地方注册,如果它是一个函数名称,它应该显示在其他地方。

我通过其他一些函数挂钩事件看到了这一点。

2 个答案:

答案 0 :(得分:2)

除了运行钩子之外,没有任何“源定义”。这是定义钩子的地方;它可能会或可能不会实际挂在的任何地方。所有钩子定义都是一个名称和一组传递给钩子回调的参数。

为了帮助找出实际使用钩子的位置,您可以使用(新)代码搜索工具:

https://codesearch.wmflabs.org/extensions/?q=BeforeFreeTextSubst

(看起来这个维基媒体源控件中的任何扩展都没有使用它。)

答案 1 :(得分:2)

您是否在尝试查找挂钩运行时调用的函数?那里的情况有点混乱。有两种定义钩子的机制:

  • $wgHooks全局(这是注册挂钩的常规方式);
  • Hooks::register方法(有时用于动态注册挂钩)。

$wgHooks通常通过extension.json文件设置,但也可以动态设置。

找出注册了哪些挂钩的最快方法是运行maintenance/shell.php并输入$wgHooks。这将错过通过其他方法注册的钩子,以及有条件注册的钩子(例如仅用于API调用),但它仍然可以在99%的时间内工作。否则,你将不得不为此而努力,正如Sam所说。