Die Funktion, die Sie verwenden könnten, ist user_uid_optional_load () ; Ohne Argumente wird das Benutzerobjekt für den derzeit angemeldeten Benutzer zurückgegeben. Es verwendet weiterhin das globale $user
Objekt und lädt das gesamte Objekt aus der Datenbank, einschließlich der den Benutzern zugeordneten Felder. Es verhindert jedoch, dass Ihr Code versehentlich den Inhalt der globalen Variablen ändert $user
, da in Ihrem Code nicht darauf verwiesen wird.
function user_uid_optional_load($uid = NULL) {
if (!isset($uid)) {
$uid = $GLOBALS['user']->uid;
}
return user_load($uid);
}
Wenn Sie nicht das gesamte Objekt benötigen, können Sie den Code verwenden, der bereits in den anderen Antworten angegeben ist. Wenn Sie sicherstellen möchten, dass Sie das globale Objekt nicht ändern, können Sie die globale Variable in eine lokale Variable kopieren, wie im folgenden Snippet dargestellt.
$account = $GLOBALS['user'];
// Use $account.
In Drupal 8 verwenden Sie einfach die statische Methode \Drupal::currentUser()
, um das Äquivalent von Drupal 7 abzurufen $GLOBALS['user']
und \Drupal\user\Entity\User::load(\Drupal::currentUser()->id())
ein vollständig geladenes Objekt mit allen Feld-API-Feldern abzurufen. Es besteht nicht mehr das Risiko, eine globale Variable mit allen Konsequenzen zu überschreiben.
Für den Fall, dass Sie den aktuellen Benutzer mit dem anonymen Benutzer tauschen müssen, ist der in Drupal 8 verwendete Code der folgende.
$accountSwitcher = Drupal::service('account_switcher');
$accountSwitcher->switchTo(new Drupal\Core\Session\AnonymousUserSession());
// Your code here.
// Eventually, restore the user account.
$accountSwitcher->switchBack();