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()
方法。
我正在学习 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()
方法。