आप जिस फ़ंक्शन का उपयोग कर सकते हैं वह 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();