Eu tenho um formulário personalizado que precisa exibir um valor padrão de um campo de usuário personalizado. O campo foi criado em / admin / config / people / accounts / fields e seu nome da máquina é field_r_period_length_sec.
//get user
$userCurrent = \Drupal::currentUser();
$uid = $userCurrent->id();
$r_period = $userCurrent->field_r_period_length_sec;
No entanto, o valor não aparece e recebo este erro:
Aviso: Propriedade indefinida: Drupal \ Core \ Session \ AccountProxy :: $ field_r_period_length_sec
O que estou fazendo errado?
$r_period = $user->field_r_period_length_sec->value;
adicione este comentário/** @var $user \Drupal\user\Entity\User */
acima$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
O objeto de usuário atual não é uma entidade de usuário. Você precisa carregar o usuário com esse ID para acessar qualquer campo, exceto as informações especificadas por
AccountInterface
.fonte
Não sei desde quando essas respostas não funcionam mais, mas com o Drupal 8.5 a solução acima retorna nula o tempo todo.
Após a investigação, a solução para acessar o campo personalizado a partir de um perfil de usuário é:
Então você pode fazer
fonte
Entity::load()
é baseado no\Drupal::entityManager();
qual está obsoleto .Uma maneira melhor de fazer isso é usar entityTypeManager ().
fonte