laravel 5.4:无法在__construct方法中访问Auth :: user()

hre*_*tic 8 php laravel laravel-5.4

在Laravel的早期版本中,在我需要以所有方法访问登录用户的控制器中,我曾经做过这样的事情:

class DashboardController extends Controller
{
    private $user ;
    function __construct(Request $request)
    {
        $this->middleware('auth');
        $this->user = \Auth::user();
    }

    function func_1(){
      $objects = Objects::where('user_id' , $this->user->id )->get();
    }
    function func_2(){
      $objects = Objects::where('user_id' , $this->user->id )->get();
    }
    function func_3(){
      $objects = Objects::where('user_id' , $this->user->id )->get();
    }
Run Code Online (Sandbox Code Playgroud)

主要是因为我不喜欢默认语法,\Auth::user()但在升级到5.4之后,这不再适用了,而且我得到null$this->user

但它在其他方法中工作正常.基本上,\Auth::user()返回null__construct方法,但在其他功能工作正常.

Mar*_*boc 15

正如文件所说:

在以前版本的Laravel中,您可以在控制器的构造函数中访问会话变量或经过身份验证的用户.这从未打算成为框架的明确特征.在Laravel 5.3中,您无法访问控制器构造函数中的会话或经过身份验证的用户,因为中间件尚未运行.

试试这个:

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

        return $next($request);
    });
}
Run Code Online (Sandbox Code Playgroud)