La función que podría usar es user_uid_optional_load () ; sin argumentos, devuelve el objeto de usuario para el usuario actualmente conectado. Todavía usa el global $user
y carga el objeto completo de la base de datos, incluidos los campos asociados a los usuarios, pero evita que su código cambie accidentalmente el contenido de la variable global $user
, ya que no se hace referencia a él desde su código.
function user_uid_optional_load($uid = NULL) {
if (!isset($uid)) {
$uid = $GLOBALS['user']->uid;
}
return user_load($uid);
}
Si no necesita el objeto completo, puede usar el código que ya se informó en las otras respuestas. Si desea asegurarse de no alterar el objeto global, puede copiar la variable global en una variable local, como en el siguiente fragmento.
$account = $GLOBALS['user'];
// Use $account.
En Drupal 8, simplemente usa el método estático \Drupal::currentUser()
para obtener el equivalente de Drupal 7 $GLOBALS['user']
y \Drupal\user\Entity\User::load(\Drupal::currentUser()->id())
obtener un objeto completamente cargado con todos sus campos API de campo. Ya no existe el riesgo de anular una variable global con todas las consecuencias.
En el caso de que necesite cambiar el usuario actual con, por ejemplo, el usuario anónimo, el código que usa en Drupal 8 es el siguiente.
$accountSwitcher = Drupal::service('account_switcher');
$accountSwitcher->switchTo(new Drupal\Core\Session\AnonymousUserSession());
// Your code here.
// Eventually, restore the user account.
$accountSwitcher->switchBack();