0

我正在学习如何在 mediawiki中使用钩子。我也是 PHP 新手。可以通过将下一行放入 LocalSettings.php 来添加通用挂钩处理程序:

$wgHooks['event'][] = 'function';

假设我写 myfunctionmy.php文件中。我如何从 LocalSettings.php 指向这个函数

编辑。我在 my.php 文件中编写了一些函数。如何引用这个函数?我应该告诉 mediawiki 在哪里可以找到这个功能。我不知道该怎么做。我应该写'$wgHooks['event'][] = 'my.php:function'。或者我应该将includemy.php 文件写入 LocalSetting 然后只写'$wgHooks['event'][] = 'function'

4

4 回答 4

3

正如文档所说,您需要将带有函数名称的字符串(或字符串数​​组等)推送到钩子数组。

AFAIK,当触发钩子时,它们将被调用call_user_func()。因此,这将取决于您在 my.php 文件中的函数声明。,myfunction它应该是

$wgHooks['event'][] = 'myfunction';
于 2012-05-30T17:30:21.843 回答
2

从我从 mediawiki 文档中读到的内容,您需要创建一个扩展,并在您的扩展中安装您的钩子。在 my.php 你会写:

 // $wgHooks is a global variable
 $wgHooks['event'][] = 'function';

希望我能正确理解扩展文档 http://www.mediawiki.org/wiki/Manual:Extensions

于 2012-05-30T17:16:03.717 回答
0

我不确定我是否完全理解您想要什么,但是如果您想调用用户定义的函数,您可以使用call_user_func,它将函数名称作为参数。您必须包含该文件,以便该功能可用。

call_user_func('myfunction ', array());
于 2012-05-30T17:15:10.470 回答
0

您通过PHP 中的回调来引用函数。回调是其中之一:

  1. 一个函数名:'myFunc'
  2. 一个包含类名和函数名的数组:array('MyClass', 'myFunc')
  3. 一个包含对象和函数名的数组:array($myObj, 'myFunc')
  4. 一个匿名函数(技术上是一个闭包对象):(function($x, $y) { /* PHP code */ }这只是 PHP 5.3+,但 MediaWiki 的最新版本也是如此)

通过调用这些回调call_user_func($callback, $arg1, $arg2)将分别等效于以下内容:

  1. myFunc($arg1, $arg2);
  2. MyClass::myFunc($arg1, $arg2);
  3. $myObj->myFunc($arg1, $arg2);
  4. 执行匿名函数的主体,将$xand$y替换为$arg1and$arg2

如果此代码失败(例如,您使用第一个版本,并且myFunc未加载该函数),回调也将失败。您可以在 MediaWiki 中使用第二种形式的自动加载,通常通过$wgAutoloadClasses完成:

// in MyExtension.php
$wgHooks['event'][] = array('MyExtension', 'myEventHandler');
$wgAutoloadClasses['MyExtension'] = dirname(__FILE__) . 'MyExtension.body.php';

// in MyExtension.body.php
class MyExtension {
    public function myEventHandler($p1, $p2) {
        // do stuff
    }
}

这样,您可以从 加载MyExtension.php(这是一个仅具有配置设置的小文件)LocalSettings.php,并且MyExtension.body.php(其中包含所有代码)仅在实际使用您的扩展的那些请求中加载。

于 2012-05-31T08:08:44.807 回答