ฟังก์ชั่นที่คุณสามารถใช้ได้คือuser_uid_optional_load () ; โดยไม่มีข้อโต้แย้งมันจะส่งคืนวัตถุผู้ใช้สำหรับผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน มันยังคงใช้โกลบอล$user
และโหลดออบเจ็กต์เต็มจากฐานข้อมูลรวมถึงฟิลด์ที่เกี่ยวข้องกับผู้ใช้ แต่มันจะหลีกเลี่ยงรหัสของคุณเปลี่ยนเนื้อหาของตัวแปรทั่วโลกโดยไม่ได้ตั้งใจ$user
เนื่องจากไม่ได้อ้างอิงจากรหัสของคุณ
function user_uid_optional_load($uid = NULL) {
if (!isset($uid)) {
$uid = $GLOBALS['user']->uid;
}
return user_load($uid);
}
หากคุณไม่ต้องการวัตถุเต็มคุณสามารถใช้รหัสที่ได้รายงานไปแล้วในคำตอบอื่น ๆ หากคุณต้องการให้แน่ใจว่าคุณไม่ได้เปลี่ยนออบเจคโกลบอลคุณสามารถคัดลอกตัวแปรโกลบอลไปที่ตัวแปรโลคอลเช่นเดียวกับในตัวอย่างต่อไปนี้
$account = $GLOBALS['user'];
// Use $account.
ใน Drupal 8 คุณเพียงใช้เมธอดสแตติก\Drupal::currentUser()
เพื่อรับค่าเท่ากับ Drupal 7 $GLOBALS['user']
และ\Drupal\user\Entity\User::load(\Drupal::currentUser()->id())
รับวัตถุที่โหลดเต็มพร้อมกับฟิลด์ API ฟิลด์ทั้งหมด ไม่มีความเสี่ยงในการเอาชนะตัวแปรทั่วโลกอีกต่อไปที่มีผลกระทบทั้งหมด
ในกรณีที่คุณต้องการสลับผู้ใช้ปัจจุบันด้วยตัวอย่างเช่นผู้ใช้ที่ไม่ระบุชื่อรหัสที่คุณใช้ใน Drupal 8 คือรหัสต่อไปนี้
$accountSwitcher = Drupal::service('account_switcher');
$accountSwitcher->switchTo(new Drupal\Core\Session\AnonymousUserSession());
// Your code here.
// Eventually, restore the user account.
$accountSwitcher->switchBack();