Как получить текущий объект пользователя в Drupal 8?

Как получить текущий объект пользователя в Drupal 8?

23.08.2017 01:12:56 Просмотров 99 Источник

Я хорошо разбираюсь в Drupal 7, где я получаю текущий объект пользователя от global $user, но как я могу получить его в Drupal 8 ?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/45836862/how-to-get-the-current-user-object-in-drupal-8#comment78631267_45836862
Может быть, это поможет вам? -> drupal.stackexchange.com/questions/146308/access-user-fields

Ответы - Как получить текущий объект пользователя в Drupal 8? / How to get the current user object in Drupal 8?

Является ответом!
Vipin Mittal

23.08.2017 01:15:01

Пожалуйста, используйте следующий код, чтобы получить текущий объект пользователя в Drupal 8: $user = \Drupal::currentUser();

https://stackoverflow.com/questions/45836862/how-to-get-the-current-user-object-in-drupal-8/45836916#comment78631143_45836916
Спасибо Випин. Есть ли способ получить идентификатор пользователя напрямую, используя любую функцию или любую глобальную переменную.
https://stackoverflow.com/questions/45836862/how-to-get-the-current-user-object-in-drupal-8/45836916#comment78631220_45836916
Да, Викас. используйте $ownerId = \Drupal:: currentUser () - > id();
https://stackoverflow.com/questions/45836862/how-to-get-the-current-user-object-in-drupal-8/45836916#comment78631346_45836916
ВАУ... Это хорошо работает. Отличная Работа Випин!!
Srijeeta Ghosh

24.08.2017 09:40:27

$user = \Drupal::currentUser();

Чтобы получить текущий идентификатор пользователя, вы можете использовать :

$user = User::load(\Drupal::currentUser()->id());
EricLavault

14.07.2019 01:08:53

Один из способов получить полный объект пользователя drupal для текущего активного пользователя :

$account = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());

Почему бы просто Drupal::currentUser()? Потому что в большинстве случаев этого будет недостаточно, так как вам понадобится полностью загруженный пользовательский объект, пока его нет :

Kiwad

12.11.2019 02:09:51

Согласно entity api, мы не должны использовать User:: load. Вместо этого используйте entityTypeManager следующим образом :

$user_id = \Drupal::currentUser()->id();
$user_entity = \Drupal::entityTypeManager()->getStorage('user')->load($user_id);
https://stackoverflow.com/questions/45836862/how-to-get-the-current-user-object-in-drupal-8/58809845#comment104102987_58809845
В соответствии с документацией Entity API, которую вы только что связали, следует " избегать использования метода static Entity:: load() в объектно-ориентированном коде. Вместо того, чтобы использовать внедрение зависимостей для вставки в диспетчер сущностей типа и загружать лицо с $этом->entityTypeManager->getStorage($entity_type)->загрузить($entity_id)."Стоит отметить, что хорошо использовать метод static Entity:: load() в других обстоятельствах, когда вы не будете использовать инъекцию зависимостей, например, a .модуль файл и т. д.
https://stackoverflow.com/questions/45836862/how-to-get-the-current-user-object-in-drupal-8/58809845#comment104103123_58809845
Кроме того, код, который вы поделились выше, не использование внедрения зависимостей, как это было рекомендовано API сущности, что противоречит цели предпочитая $этом->entityTypeManager->getStorage($entity_type)->загрузить($entity_id) на статическую сущность::load() метод.
https://stackoverflow.com/questions/45836862/how-to-get-the-current-user-object-in-drupal-8/58809845#comment104106771_58809845
Спасибо за Ваш вклад @kenS, вы правы насчет этой инъекции зависимости. Тем не менее, мой ответ имеет то преимущество, что не нужно включать "use Drupal\user\Entity\User;" в верхней части вашего php-файла.
https://stackoverflow.com/questions/45836862/how-to-get-the-current-user-object-in-drupal-8/58809845#comment104144558_58809845
Это правда. Этот ответ stackoverflow.com/a/57026412/10146245 точно так же не требуется оператор use, и IMO-это более простой код для написания и чтения, поэтому лично я предпочитаю, когда не использую инъекцию зависимостей. Но причина моего downvote - это не ваш код, который выглядит нормально и является допустимым способом получить текущего пользователя, а потому, что ваше заявление выше кода ("согласно entity api, мы не должны использовать User::load. Вместо этого, используйте entityTypeManager...") является неточным / вводящим в заблуждение способом, на который я указал.
Закрыть X