У меня есть пользовательская форма, которая должна отображать значение по умолчанию из пользовательского поля пользователя. Поле было создано в / admin / config / people / account / fields и его имя машины - 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
Что я делаю неправильно?
$r_period = $user->field_r_period_length_sec->value;
добавьте этот комментарий/** @var $user \Drupal\user\Entity\User */
выше$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
Текущий объект пользователя не является объектом пользователя. Вам нужно загрузить пользователя с этим идентификатором для доступа к любому полю, кроме информации, указанной в
AccountInterface
.источник
Я не знаю с тех пор, когда эти ответы больше не работают, но в Drupal 8.5 вышеприведенное решение все время возвращает null.
После исследования решение для доступа к настраиваемому полю из профиля пользователя:
Тогда вы можете сделать
источник
Entity::load()
основано на том,\Drupal::entityManager();
что не рекомендуется .Лучший способ сделать это - использовать entityTypeManager ().
источник