Отримайте значення спеціального поля користувача


13

У мене є власна форма, яка повинна відображати значення за замовчуванням у користувацькому полі користувача. Поле було створене під / admin / config / люди / акаунти / поля та його ім'я машини - field_r_period_length_sec.

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

Однак значення не відображається, і я отримую цю помилку:

Примітка: Не визначене властивість: Drupal \ Core \ Session \ AccountProxy :: $ field_r_period_length_sec

Що я роблю неправильно?

Відповіді:


17

Відповідь Бердіра дала мені пошуковий термін, який отримав мені це:

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

Після невеликих спроб та помилок, це код, який працює, на випадок, коли хтось потребує:

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

Для кількох значень використовуйте

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

1
Для всіх, хто хоче зняти попередження з PHPStorm, $r_period = $user->field_r_period_length_sec->value;додайте цей коментар /** @var $user \Drupal\user\Entity\User */вище$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
Ніл Нанд

3

Поточний об'єкт користувача не є об'єктом користувача. Вам потрібно завантажити користувача з цим ідентифікатором, щоб отримати доступ до будь-якого поля, крім інформації, визначеної AccountInterface.


2

Я не знаю, з тих пір, коли ці відповіді більше не працюють, але з Drupal 8.5 вищезазначене рішення постійно повертається до нуля.

Після дослідження рішенням доступу до користувацького поля з профілю користувача є:

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

Тоді ви можете зробити

$activeProfile->field_xxx->value

Дякую! Мені вдалося отримати конкретне поле з профілю користувача. Але мені цікаво, як можна встановити / оновити ім'я поля профілю? TIA
Джон Рей Танкінко

1
$ profile-> set ('ім'я_поля', значення)
Денис Колмершлаг,

1

Entity::load()базується на тому, \Drupal::entityManager();що застаріло .

Кращий спосіб зробити це за допомогою entitTypeManager ().

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.