【问题标题】:How to get the current user object in Drupal 8?如何在 Drupal 8 中获取当前用户对象?
【发布时间】:2017-08-23 10:12:56
【问题描述】:

我精通 Drupal 7,我从 global $user 获取当前用户对象,但如何在 Drupal 8 中获取它?

【问题讨论】:

标签: php drupal drupal-8


【解决方案1】:

一种为当前活动用户获取完整 drupal 用户对象的线性方法:

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

为什么不只是 Drupal::currentUser() ?因为大多数时候它是不够的,因为你需要一个完全加载的用户对象,而它不是:

【讨论】:

    【解决方案2】:

    请使用以下代码获取 Drupal 8 中的当前用户对象: $user = \Drupal::currentUser();

    【讨论】:

    • 谢谢维平。有没有办法通过使用任何函数或任何全局变量直接获取用户 ID。
    • 是的,维卡斯。使用 $ownerId = \Drupal::currentUser()->id();
    【解决方案3】:
    $user = \Drupal::currentUser();
    

    要获取当前的用户 ID,您可以使用:

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

    【讨论】:

      【解决方案4】:

      根据entity api,我们不应该使用User::load。相反,像这样使用 entityTypeManager:

      $user_id = \Drupal::currentUser()->id();
      $user_entity = \Drupal::entityTypeManager()->getStorage('user')->load($user_id);
      

      【讨论】:

      • 根据您刚刚链接的实体 API 文档,应该“避免在面向对象的代码中使用静态 Entity::load() 方法。而是使用依赖注入来注入实体类型管理器并加载$this->entityTypeManager->getStorage($entity_type)->load($entity_id) 的实体。"值得注意的是,在其他不使用依赖注入的情况下使用静态 Entity::load() 方法是可以的,例如 .module 文件等。
      • 此外,您在上面共享的代码不使用依赖注入,正如 Entity API 所推荐的那样,这违背了首选 $this->entityTypeManager->getStorage($entity_type)->load( $entity_id) 覆盖静态 Entity::load() 方法。
      • 感谢您的贡献@kenS,您对依赖注入的看法是正确的。尽管如此,我的答案的优点是不必包含“使用 Drupal\user\Entity\User;”在你的 php 文件的顶部。
      • 确实如此。这个答案stackoverflow.com/a/57026412/10146245 同样不需要 use 语句,而且 IMO 更容易编写和阅读代码,所以我个人在不使用依赖注入时更喜欢这样。但是我投反对票的原因不是您的代码,它看起来不错并且是获取当前用户的有效方法,而是因为您在代码上方的声明(“根据实体api,我们不应该使用User::load。而是,使用 entityTypeManager...") 以我指出的方式不准确/具有误导性。
      猜你喜欢
      • 1970-01-01
      • 2018-08-17
      • 2011-07-11
      • 2018-09-26
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      相关资源
      最近更新 更多