Fungsi yang dapat Anda gunakan adalah user_uid_optional_load () ; tanpa argumen, ia mengembalikan objek pengguna untuk pengguna yang saat ini masuk. Itu masih menggunakan global $user
, dan memuat objek penuh dari database, termasuk bidang yang terkait dengan pengguna, tetapi itu menghindari kode Anda secara tidak sengaja mengubah konten variabel global $user
, karena tidak dirujuk dari kode Anda.
function user_uid_optional_load($uid = NULL) {
if (!isset($uid)) {
$uid = $GLOBALS['user']->uid;
}
return user_load($uid);
}
Jika Anda tidak memerlukan objek lengkap, maka Anda dapat menggunakan kode yang sudah dilaporkan dalam jawaban lain. Jika Anda ingin memastikan Anda tidak mengubah objek global, Anda dapat menyalin variabel global menjadi variabel lokal, seperti dalam cuplikan berikut.
$account = $GLOBALS['user'];
// Use $account.
Di Drupal 8, Anda cukup menggunakan metode statis \Drupal::currentUser()
untuk mendapatkan yang setara dengan Drupal 7 $GLOBALS['user']
dan \Drupal\user\Entity\User::load(\Drupal::currentUser()->id())
untuk mendapatkan objek yang dimuat penuh dengan semua bidang API bidangnya. Tidak ada lagi risiko mengesampingkan variabel global dengan semua konsekuensinya.
Jika Anda perlu mengganti pengguna saat ini dengan, misalnya, pengguna anonim, kode yang Anda gunakan di Drupal 8 adalah yang berikut.
$accountSwitcher = Drupal::service('account_switcher');
$accountSwitcher->switchTo(new Drupal\Core\Session\AnonymousUserSession());
// Your code here.
// Eventually, restore the user account.
$accountSwitcher->switchBack();