web-dev-qa-db-fra.com

Obtenez la valeur d'un champ utilisateur personnalisé

J'ai un formulaire personnalisé qui doit afficher une valeur par défaut à partir d'un champ utilisateur personnalisé. Le champ a été créé sous/admin/config/people/accounts/fields et son nom d'ordinateur est field_r_period_length_sec.

//get user
$userCurrent = \Drupal::currentUser();
$uid = $userCurrent->id();
$r_period = $userCurrent->field_r_period_length_sec;

Cependant, la valeur ne s'affiche pas et j'obtiens cette erreur:

Remarque: propriété non définie: Drupal\Core\Session\AccountProxy :: $ field_r_period_length_sec

Qu'est-ce que je fais mal?

13
matt9292

La réponse de Berdir m'a donné un terme de recherche qui m'a donné ceci:

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

Après quelques essais et erreurs, voici le code qui fonctionne, au cas où quelqu'un d'autre aurait besoin:

$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
$r_period = $user->field_r_period_length_sec->value;

Pour plusieurs valeurs, utilisez

$r_period = $user->get('field_r_period_length_sec')->getValue();
17
matt9292

L'objet utilisateur actuel n'est pas une entité utilisateur. Vous devez charger l'utilisateur avec cet ID pour accéder à n'importe quel champ à l'exception des informations spécifiées par AccountInterface.

3
Berdir

Je ne sais pas depuis quand ces réponses ne fonctionnent plus, mais avec Drupal 8.5 la solution ci-dessus retourne null tout le temps.

Après enquête, la solution pour accéder au champ personnalisé à partir d'un profil utilisateur est:

$activeProfile = \Drupal::getContainer()
  ->get('entity_type.manager')
  ->getStorage('profile')
  ->loadByUser(User::load([uid]), '[profile_machine_name]');

Ensuite, vous pouvez faire

$activeProfile->field_xxx->value
2
Denis Kolmerschlag

Entity::load() est basé sur \Drupal::entityManager(); qui est obsolète .

Une meilleure façon de procéder consiste à utiliser entityTypeManager ().

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
1
powpow12