简体   繁体   English

Laravel 5.6 在控制器构造函数中访问 auth()->user()?

[英]Laravel 5.6 Access auth()->user() in controller constructor?

I am trying to access auth()->user() in controller constructor, but it always return null .我试图在控制器构造函数中访问 auth()->user() ,但它总是返回null

I have tried below, but no luck!我在下面尝试过,但没有运气!

protected $user;

function __construct() {
    $this->middleware(function ($request, $next) {
        $this->user = auth()->user();

        return $next($request);
    }); 

}

Is there any way to do this?有没有办法做到这一点?

--Thanks - 谢谢

Controller Constructor is called before Middlewares.控制器构造函数在中间件之前被调用。 So you can not get User information inside Constructor().所以你不能在 Constructor() 中获取用户信息。

My advice is create private function that sets User, and call this inside your functions.我的建议是创建设置用户的私有函数,并在您的函数中调用它。

Thanks to @Ts8060 i had the idea to create a singleton for doing that.感谢@Ts8060,我有了为此创建一个单身人士的想法。

/** @var User */
private static $user;

/**
 * Singleton
 *
 * @return User
 */
public function getUser() {
    if(empty(static::$user)) {
        static::$user = Auth::user();
    }

    return static::$user;
}

I think that auth middleware run after create controller, you may do somethink like this in your controller我认为 auth 中间件在创建控制器之后运行,您可能会在您的控制器中做这样的事情

public function callAction($method, $parameters)
{
    $this->middleware(function ($request, $next) {
       $this->user = auth()->user();

       return $next($request);
    }); 

    return parent::callAction($method, $parameters);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM