J'apprends Mediawiki et je regarde certaines des extensions.
Manual:$wgUser sur mediawiki.org indique que la variable globale $wgUser
ne doit pas être utilisée pour le nouveau code.
Manual:RequestContext.php indique que l'objet de contexte doit être utilisé à la place, en utilisant $this->getUser()
ou $context->getUser()
.
Cependant, lorsque je tente d'utiliser $this->getUser()->getName()
dans l'extension pour Qui est en ligne j'obtenir l'erreur suivante:
Fatal error: Using $this when not in object context in /home/ghsfhaco/public_html/wiki/extensions/WhosOnline/WhosOnlineHooks.php on line 19
Et quand je change à $context->getUser()->getName()
je reçois cette erreur:
Fatal error: Call to a member function getUser() on null in /home/ghsfhaco/public_html/wiki/extensions/WhosOnline/WhosOnlineHooks.php on line 19
Le plein Extension:WhosOnline peut être trouvé à Mediawiki, mais voici la page spécifique:
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;
}
}
Comment exactement devrait-il être fait?
BTW, j'utilise Mediawiki 1.28.0.
Eh bien, '$ this' /' $ context' doit exister avant de pouvoir appeler des méthodes. Il semble que votre vraie question est "comment fonctionnent les objets en PHP?", Et lire [le manuel de PHP] (https://secure.php.net/manual/fr/language.oop5.basic.php) est la meilleure façon apprendre ça. – Tgr