Php 如何在Drupal8中获取当前用户对象?
我精通Drupal 7,我从Php 如何在Drupal8中获取当前用户对象?,php,drupal,drupal-8,Php,Drupal,Drupal 8,我精通Drupal 7,我从global$user获取当前用户对象,但如何在Drupal 8中获取它?请使用以下代码在Drupal 8中获取当前用户对象: $user=\Drupal::currentUser() 要获取当前用户ID,可以使用: $user = User::load(\Drupal::currentUser()->id()); 获取当前活动用户的完整drupal用户对象的一种线性方法: $account = \Drupal\user\Entity\User::load(\
global$user
获取当前用户对象,但如何在Drupal 8中获取它?请使用以下代码在Drupal 8中获取当前用户对象:
$user=\Drupal::currentUser()代码>
要获取当前用户ID,可以使用:
$user = User::load(\Drupal::currentUser()->id());
获取当前活动用户的完整drupal用户对象的一种线性方法:
$account = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
为什么不干脆Drupal::currentUser()
?因为在大多数情况下,这是不够的,因为您需要一个完全加载的用户对象,而它不是:
- 返回一个
- 实际上返回一个
根据,我们不应该使用User::load。相反,请使用entityTypeManager,如下所示:
$user_id = \Drupal::currentUser()->id();
$user_entity = \Drupal::entityTypeManager()->getStorage('user')->load($user_id);
谢谢Vipin。有没有办法通过使用任何函数或任何全局变量直接获取用户Id。使用$ownerId=\Drupal::currentUser()->id();也许这个能帮助你?->根据您刚刚链接的实体API文档,应该“避免在面向对象代码中使用static Entity::load()方法。而是使用依赖项注入来注入实体类型管理器,并使用$this->entityTypeManager->getStorage($Entity\u type)->load($Entity\u id)加载实体。”值得注意的是,在其他不使用依赖项注入的情况下,可以使用static Entity::load()方法,例如.module文件等。此外,您上面共享的代码不使用依赖项注入,正如实体API所建议的那样,这违背了将$this->entityTypeManager->getStorage($entity\u type)->load($entity\u id)优先于static entity::load()方法的目的。感谢您的贡献@kenS,您的依赖注入是正确的。尽管如此,我的答案的优点是不必包括“use Drupal\user\Entity\user;”在php文件的顶部。非常正确。这个答案同样不需要use语句,IMO的代码更容易编写和阅读,所以就我个人而言,在不使用依赖注入时,我更喜欢这样。但我投反对票的原因不是你的代码,它看起来不错,是获取当前用户的有效方法,而是因为你在代码上面的语句(“根据实体api,我们不应该使用user::load。相反,使用entityTypeManager…”)与我指出的方式不准确/误导。
$user_id = \Drupal::currentUser()->id();
$user_entity = \Drupal::entityTypeManager()->getStorage('user')->load($user_id);