Функцией, которую вы можете использовать, является 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();