Php laravel 5.4:无法访问_构造方法中的Auth::user()

Php laravel 5.4:无法访问_构造方法中的Auth::user(),php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,在以前版本的Laravel中,在我需要访问登录用户的控制器中,我使用的所有方法如下所示: class DashboardController extends Controller { private $user ; function __construct(Request $request) { $this->middleware('auth'); $this->user = \Auth::user(); }

在以前版本的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();
    }
主要是因为我不喜欢默认语法
\Auth::user()
,但在升级到5.4之后,这不再起作用,我从
$this->user获得
null

不过,它在其他方法中也可以正常工作。基本上
\Auth::user()
\uu构造方法中返回
null
,但在其他函数中工作正常。

如所述:

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

所以试试这个:

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

        return $next($request);
    });
}

在使用命名空间加载类之前,必须定义Auth方法。请参见以下示例:

namespace App\Http\Controllers\Admin;

use Illuminate\Support\Facades\Input;
use Auth;

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();
    }
之后,如果需要,可以清理缓存。 php artisan配置:缓存

的可能重复项