【问题标题】:Non-static method Cartalyst\Sentinel\Sentinel::getUser() should not be called statically不应静态调用非静态方法 Cartalyst\Sentinel\Sentinel::getUser()
【发布时间】:2018-07-21 02:58:41
【问题描述】:

您好,我正在使用 laravel Sentinel 作为我的 Auth,我也在尝试使用 laravel 审计我得到“非静态方法 Cartalyst\Sentinel\Sentinel::getUser() 不应被静态调用”。

在我的用户模型中,我添加了一个静态函数 resolveId(),用于在 Laravel 审计“审计”表中添加 user_id

public static function resolveId(){
    return Sentinel::getUser()->getUserId();
    //return auth()->check() ? auth()->user()->getAuthIdentifier() : null;
}

当我尝试使用 \Sentinel::getUser() 时,我收到以下错误。

Non-static method Cartalyst\Sentinel\Sentinel::getUser() should not be called statically

【问题讨论】:

    标签: laravel cartalyst-sentinel laravel-auditing


    【解决方案1】:

    我知道 @manikandan k 寻求帮助的软件包版本是 4.x5.x,虽然文档确实提到了 Sentinel 的用例strong>,它没有提供一个实际的例子。

    6.x 版本开始,Audit Resolvers 文档就有这个用例,其中使用了 Sentinel

    我建议将解析器逻辑更新为以下内容:

    return Sentinel::check() ? Sentinel::getUser()->getUserId() : null;
    

    这将防止在用户未登录时在null 上调用getUserId()

    【讨论】:

      【解决方案2】:

      来自the docs

      安装软件包后,打开位于config/app.php 的 Laravel 配置文件并添加以下行。 在 $aliases 数组中为这个包添加以下外观。

      'Sentinel' => Cartalyst\Sentinel\Laravel\Facades\Sentinel::class,
      

      然后将其添加到类的顶部:

      use Sentinel;
      

      【讨论】:

        【解决方案3】:

        将此use 放在相关文件的顶部:

        use Cartalyst\Sentinel\Laravel\Facades\Sentinel;
        

        【讨论】:

        • 太好了,你拯救了我的一天。非常感谢。
        • 认为@AlexeyMenezin 的回答是一个更完整的例子
        猜你喜欢
        • 2014-09-08
        • 2013-11-10
        • 1970-01-01
        • 1970-01-01
        • 2012-08-16
        • 2015-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多