$account = \Drupal::currentUser()
carrega o objeto de usuário $account
, mas como faço para acessar os campos personalizados criados no objeto de usuário (por meio da interface do usuário do administrador)?
Com dpm($account)
eu não consigo ver nenhum dos meus campos personalizados.
\Drupal::currentUser()->id()
e fazer uma consulta ao banco de dados, mas no D7 eles já estavam no objeto?Respostas:
\Drupal::currentUser()
retorna umDrupal\Core\Session\AccountInterface
objeto. Pode ser um usuário completo (seria umDrupal\user\UserInterface
), mas, no momento, para o método de autenticação padrão, não é.Use isso para obter a entidade do usuário e todos os campos:
D7 teve exatamente o mesmo comportamento, a diferença agora é que, em D7, eles eram simplesmente diferentes stdClass'es, agora você tem interfaces explícitas para diferenciar os dois.
fonte
$GLOBALS['user']
não contém um objeto de usuário totalmente carregado, no Drupal 7; Ele contém apenas as informações encontradas na tabela de usuários.E aqui está como tirá-lo desse objeto:
fonte
$user->id()
.Drupal::currentUser()
retorna um objeto implementadoDrupal\Core\Session\AccountProxyInterface
. Isso é diferente do que retornouUser::load()
, que é um objeto implementadoDrupal\user\UserInterface
.Isso significa que não é garantido que você obtenha um
User
objeto completo com seus campos carregados, mas nem mesmo que você obtenha umUser
objeto. Como conseqüência, você chama alguns dos métodos disponíveis naUser
classe, comoUser::get()
. Você pode ligarAccountInterface::id()
, que retorna o ID do usuário; com isso, é possível carregar oUser
objeto completoUser::load()
e ter acesso a todos os módulos de campos anexados à entidade.Com
$account
, você poderá acessar todos os campos associados a uma conta de usuário.fonte
$account = \Drupal::currentUser(): dpm($account);
que não mostra nenhum campo personalizado? mas esta resposta diz como acessar os campos de entidade do usuário. Como a pergunta não diz quais campos o OP está tentando acessar, a resposta apenas diz qual método usar. Não há respostas de @batigolix.Aqui está uma linha, usando a função API:
Depois disso, os campos do usuário estarão acessíveis.
fonte