web-dev-qa-db-fra.com

Accéder aux champs utilisateurs?

$account = \Drupal::currentUser() charge l'objet utilisateur dans $account, mais comment accéder aux champs personnalisés que j'ai créés sur l'objet utilisateur (via l'interface utilisateur d'administration)?

Avec dpm($account) je ne peux voir aucun de mes champs personnalisés.

20
dbj44

\Drupal::currentUser() renvoie un Drupal\Core\Session\AccountInterface objet. Cela pourrait être un utilisateur complet (ce serait un Drupal\user\UserInterface), mais pour l'instant, pour la méthode d'authentification par défaut, ce n'est pas le cas.

Utilisez ceci pour obtenir l'entité utilisateur et tous les champs:

$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id())

D7 avait exactement le même comportement, la différence est maintenant que dans D7, ils étaient simplement différents stdClass'es, maintenant vous avez des interfaces explicites pour différencier les deux.

32
Berdir

Et voici comment le retirer de cet objet:

// Load the current user.
$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());

// Get field data from that user.
$website = $user->get('field_website')->value;
$body = $user->get('body')->value;

// Some default getters include.
$email = $user->get('mail')->value;
$name = $user->get('name')->value;
$uid= $user->get('uid')->value;
19
Darryn

Drupal::currentUser() renvoie un objet implémentant Drupal\Core\Session\AccountProxyInterface . C'est différent de ce qui est retourné par User::load(), qui est un objet implémentant Drupal\user\UserInterface .

Cela signifie qu'il n'est pas certain que vous obtenez un objet User complet avec ses champs chargés, mais il n'est même pas assuré que vous obtenez un objet User. Par conséquent, vous appelez call certaines des méthodes disponibles à partir de la classe User, telles que User::get(). Vous pouvez appeler AccountInterface::id() , qui renvoie l'ID utilisateur; avec cela, vous pouvez ensuite charger l'objet User complet avec User::load() et avoir accès à tous les modules de champs attachés à l'entité.

use Drupal\Core\Session\AccountProxyInterface;
use Drupal\user\Entity\User;

$account = User::load(\Drupal::currentUser()->id());

Avec $account, Vous pouvez alors accéder à tous les champs associés à un compte utilisateur.

1
kiamlaluno