【问题标题】:Get last accessed timestamp value of a user in Drupal 8在 Drupal 8 中获取用户的最后访问时间戳值
【发布时间】:2016-06-15 12:08:44
【问题描述】:

我试图在用户登录时显示最后访问的字段。为此,我尝试使用 User::getLastLoginTime() 。但这会返回一个致命错误,说

PHP 致命错误:调用 /var/www/html/core/modules/user/src/Entity/User.php 中未定义的方法 Drupal\customize_block\Plugin\Block\ContractDetails::get()第 265 行

这是我的块,在我的自定义模块中:

/**
 * Provides a 'Customized contract' Block
 *
 * @Block(
 *   id = "customer_info",
 *   label = @Translation("Customer and contract info"),
 *   module = "user",
 *   context = {
 *     "current_user" = @ContextDefinition("entity:user", label = @Translation("Current User"))
 *   }
 * )
namespace Drupal\customize_block\Plugin\Block;

use Drupal\Core\Block\BlockBase;

class ContractInfo extends BlockBase {
 public function build() {
 $output='';
 global $base_url;
 $current_user = $this->getContext('current_user');
 $output.='<div>' . $current_user -> contextData . '</div>';

     return array(
      '#markup' => $output,
      '#cache' => array(
     'contexts' => array('url'),
      ),
    );
  }
}

我是否以正确的方式调用此方法?

【问题讨论】:

    标签: drupal drupal-8


    【解决方案1】:

    不,你没有。您需要一些特定的用户,例如当前用户或其他用户对象。为当前用户执行此操作,如下所示:

    \Drupal::currentUser()->getLastAccessedTime();
    

    【讨论】:

    • 感谢@Frank 的回复,不建议在块内使用Drupal::currentUser 来紧密耦合。我正在尝试使用 Context system 作为块扩展 ContextAwarePluginBase (请查看上面的更新代码。)现在,问题是 user属性在这里受到保护。如何在 AccountInterface 上使用 getter 以便访问它的 getLastAccessedTime()
    • 好吧,我看不出有什么问题,只需在 Drupal 核心中搜索“\Drupal::currentUser()”,它几乎无处不在。因此,如果它对核心来说足够好,对我来说就足够好了:-) 但是如果你找到了一种与上下文相关的工作方式,我会对看到这种方法感兴趣!祝你好运!
    • 抱歉@frank 回复晚了,在块内使用上下文几乎可以工作。上面的代码,$current_user 有整个用户相关的细节。我无法访问它,尽管它是私有的。你知道访问私有属性的方法吗?
    • 我按照你描述的方式试过了,但我得到的只是一个上下文对象(getContext)。我不知道如何从那个获取用户对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    相关资源
    最近更新 更多