Получить значение настраиваемого поля пользователя


У меня есть пользовательская форма, которая должна отображать значение по умолчанию из пользовательского поля пользователя. Поле было создано в папке /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\Сессия\Accountproxy::$field_r_period_length_sec

Что я делаю не так?

 16
Author: espero, 2016-03-18

4 answers

Ответ Бердира дал мне поисковый запрос, который дал мне следующее:

$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();
 22
Author: matt9292, 2017-08-26 08:51:14

Текущий объект пользователя не является сущностью пользователя. Вам необходимо загрузить пользователя с этим идентификатором, чтобы получить доступ к любому полю, кроме информации, указанной AccountInterface.

 3
Author: Berdir, 2016-03-18 19:40:01

Я не знаю, с каких пор эти ответы больше не работают, но с Drupal 8.5 вышеупомянутое решение все время возвращает значение null.

После исследования решение для доступа к пользовательскому полю из профиля пользователя выглядит следующим образом:

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

Тогда вы можете сделать

$activeProfile->field_xxx->value
 2
Author: Denis Kolmerschlag, 2018-07-30 01:19:28

Entity::load() основан на \Drupal::entityManager();, который является устаревшим .

Лучший способ сделать это - использовать entityTypeManager().

$user = \Drupal::entityTypeManager()->getStorage('user')->load($current_user->id());
$r_period = $user->field_r_period_length_sec->value;
 1
Author: powpow12, 2017-08-22 11:23:01