如何在 Mediawiki 扩展中追踪自定义挂钩事件的源定义?
How do I track down the source definition of a custom hook event in a Mediawiki extension?
这是一个例子:
https://phabricator.wikimedia.org/diffusion/EPFM/browse/master/?grep=BeforeFreeTextSubst
一个 Mediawiki 扩展,其中 Hooks::run( 'PageForms::BeforeFreeTextSubst', ...) 被调用,但没有其他记录或跟踪它的定义位置。如果有一些 strings/names 到函数的映射,它将在其他地方注册,如果它是一个函数名称,它应该出现在其他地方。
我在其他一些函数挂钩事件中看到了这一点。
除了钩子 运行 的来源外,没有任何 "source definition"。那就是定义钩子的地方;它实际上可能会也可能不会在任何地方挂钩 到 。所有挂钩定义都是一个名称和一组传递给挂钩回调的参数。
为了帮助找出挂钩的实际使用位置,您可以使用(新的)代码搜索工具:
https://codesearch.wmflabs.org/extensions/?q=BeforeFreeTextSubst
(看起来维基媒体源代码控制中的任何扩展都没有使用这个。)
您是否正在尝试查找挂钩 运行 时调用的函数?那里的情况有点混乱。有两种定义钩子的机制:
$wgHooks
全局(这是注册钩子的正常方式);
- 和
Hooks::register
方法(有时用于动态注册挂钩)。
$wgHooks
通常通过 extension.json
文件设置,但也可以动态设置。
找出注册了哪些挂钩的最快方法是 运行 maintenance/shell.php
并输入 $wgHooks
。这将错过通过其他方法注册的挂钩,以及有条件注册的挂钩(例如,仅针对 API 调用),但它在 99% 的时间仍然有效。否则,您将不得不像 Sam 所说的那样使用 grep。
这是一个例子:
https://phabricator.wikimedia.org/diffusion/EPFM/browse/master/?grep=BeforeFreeTextSubst
一个 Mediawiki 扩展,其中 Hooks::run( 'PageForms::BeforeFreeTextSubst', ...) 被调用,但没有其他记录或跟踪它的定义位置。如果有一些 strings/names 到函数的映射,它将在其他地方注册,如果它是一个函数名称,它应该出现在其他地方。
我在其他一些函数挂钩事件中看到了这一点。
除了钩子 运行 的来源外,没有任何 "source definition"。那就是定义钩子的地方;它实际上可能会也可能不会在任何地方挂钩 到 。所有挂钩定义都是一个名称和一组传递给挂钩回调的参数。
为了帮助找出挂钩的实际使用位置,您可以使用(新的)代码搜索工具:
https://codesearch.wmflabs.org/extensions/?q=BeforeFreeTextSubst
(看起来维基媒体源代码控制中的任何扩展都没有使用这个。)
您是否正在尝试查找挂钩 运行 时调用的函数?那里的情况有点混乱。有两种定义钩子的机制:
$wgHooks
全局(这是注册钩子的正常方式);- 和
Hooks::register
方法(有时用于动态注册挂钩)。
$wgHooks
通常通过 extension.json
文件设置,但也可以动态设置。
找出注册了哪些挂钩的最快方法是 运行 maintenance/shell.php
并输入 $wgHooks
。这将错过通过其他方法注册的挂钩,以及有条件注册的挂钩(例如,仅针对 API 调用),但它在 99% 的时间仍然有效。否则,您将不得不像 Sam 所说的那样使用 grep。