$account = \Drupal::currentUser()
загружает пользовательский объект $account
, но как мне получить доступ к настраиваемым полям, которые я создал для пользовательского объекта (через интерфейс администратора)?
С dpm($account)
я не вижу ни одного из моих пользовательских полей.
\Drupal::currentUser()->id()
и затем выполнить запрос к базе данных, но в D7 они уже были на объекте?Ответы:
\Drupal::currentUser()
возвращаетDrupal\Core\Session\AccountInterface
объект. Это может быть полный пользователь (это был быDrupal\user\UserInterface
), но сейчас, для метода аутентификации по умолчанию, это не так.Используйте это, чтобы получить пользовательскую сущность и все поля:
У D7 было точно такое же поведение, разница теперь только в том, что в D7 они были просто разными stdClass'ами, теперь у вас есть явные интерфейсы для их различия.
источник
$GLOBALS['user']
нет полностью загруженного пользовательского объекта; он содержит только информацию, найденную в таблице пользователей.А вот как вытащить его из этого объекта:
источник
$user->id()
.Drupal::currentUser()
возвращает объект , реализующийDrupal\Core\Session\AccountProxyInterface
. Это отличается от того, что возвращеноUser::load()
, который является объектом реализацииDrupal\user\UserInterface
.Это означает, что вы не уверены, что вы получили полный
User
объект с загруженными полями, но даже не уверены, что вы получилиUser
объект. Как следствие, вы вызываете вызов некоторых методов, доступных вUser
классе, таких какUser::get()
. Вы можете позвонитьAccountInterface::id()
, который возвращает идентификатор пользователя; после этого вы можете загрузить полныйUser
объектUser::load()
и получить доступ ко всем модулям полей, прикрепленным к объекту.С помощью
$account
вы можете получить доступ ко всем полям, связанным с учетной записью пользователя.источник
$account = \Drupal::currentUser(): dpm($account);
не отображаются какие-либо настраиваемые поля? но этот ответ говорит, как получить доступ к полям объекта пользователя. Поскольку в вопросе не говорится, к каким полям пытается получить доступ OP, ответ просто говорит, какой метод использовать. Нет ответов от @batigolix.Вот одна строка, использующая функцию API:
После этого пользовательские поля будут доступны.
источник