Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Drupal8中获取当前用户对象?_Php_Drupal_Drupal 8 - Fatal编程技术网

Php 如何在Drupal8中获取当前用户对象?

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(\

我精通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(\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);