MediaWiki $wgUser 到 $this->getUser() 和 $context->getUser() 不工作

MediaWiki $wgUser to $this->getUser() and $context->getUser() not working

我正在学习 Mediawiki 并查看一些扩展。

Manual:$wgUser on mediawiki.org 声明全局变量 $wgUser 不应用于新代码。

Manual:RequestContext.php 表示应该使用上下文对象,通过使用 $this->getUser()$context->getUser().

但是,当我尝试在 Who's Online 的扩展中使用 $this->getUser()->getName() 时,出现以下错误:

Fatal error: Using $this when not in object context in /home/ghsfhaco/public_html/wiki/extensions/WhosOnline/WhosOnlineHooks.php on line 19

当我将其更改为 $context->getUser()->getName() 时,出现此错误:

Fatal error: Call to a member function getUser() on null in /home/ghsfhaco/public_html/wiki/extensions/WhosOnline/WhosOnlineHooks.php on line 19

完整的 Extension:WhosOnline 可以在 Mediawiki 找到,但这里是具体页面:

    class WhosOnlineHooks {

    // update online data
    public static function onBeforePageDisplay() {
        global $wgUser;

        // write to DB (use master)
        $dbw = wfGetDB( DB_MASTER );
        $now = gmdate( 'YmdHis', time() );

        // row to insert to table
        $row = array(
            'userid' => $wgUser->getId(),
            'username' => $wgUser->getName(),
            'timestamp' => $now
        );

        $method = __METHOD__;
        $dbw->onTransactionIdle( function() use ( $dbw, $method, $row ) {
            $dbw->upsert(
                'online',
                $row,
                array( array( 'userid', 'username' ) ),
                array( 'timestamp' => $row['timestamp'] ),
                $method
            );
        } );

        return true;
    }

    public static function onLoadExtensionSchemaUpdates( $updater ) {
        $updater->addExtensionUpdate( array( 'addTable', 'online',
            __DIR__ . '/whosonline.sql', true ) );
        return true;
    }
}

具体应该怎么做?

顺便说一句,我正在使用 Mediawiki 1.28.0。

从您链接的页面(使用请求上下文 > 使用挂钩时):如果您的挂钩提供一个 OutputPage 作为参数使用它提供的上下文。 BeforePageDisplay 确实提供了一个 OutputPage,所以只需使用它的 getUser() 方法。