Php 在Laravel 5.3中的父构造函数中访问身份验证

Php 在Laravel 5.3中的父构造函数中访问身份验证,php,laravel,laravel-5,constructor,controller,Php,Laravel,Laravel 5,Constructor,Controller,我正在开发Laravel 5.3中的一个应用程序。我已经创建了一个AppController。我希望我的所有控制器都扩展AppController,以便它们都共享一些公共属性和方法 考虑到下面的两种实现,我的目的是在构建AppController时将当前用户设置为$this->user,以便所有扩展AppController的控制器都可以使用它 我希望在调用\App\Http\Controllers\User时\PermissionController@test我应该将我的用户对象转储两次。当A

我正在开发Laravel 5.3中的一个应用程序。我已经创建了一个
AppController
。我希望我的所有控制器都扩展
AppController
,以便它们都共享一些公共属性和方法

考虑到下面的两种实现,我的目的是在构建
AppController
时将当前用户设置为
$this->user
,以便所有扩展
AppController
的控制器都可以使用它

我希望在调用
\App\Http\Controllers\User时\PermissionController@test
我应该将我的用户对象转储两次。当
AppController
初始化时一次,当
PermissionController@test
被调用

但是,在
AppController\uu construct()
内部,
$this->user
PermissionController@test
按预期转储用户

AppController:
控制器构造在任何中间件之前执行,因此还没有用户()

您可以使用指南中描述的闭包中间件

从文件中

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

或者,您可以直接在控制器的构造函数中定义基于闭包的中间件。在使用此功能之前,请确保您的应用程序正在运行Laravel 5.3.4或更高版本:

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

        return $next($request);
    });
}
请核对我的答案


如果您使用的是Laravel 5.3,则需要移动此签入中间件。这是因为Laravel 5.3发生了更改。如果需要在构造函数中使用Auth,则需要这样做:

public function __construct()
{
     $this->middleware(function ($request, $next) {
             if(\Auth::check() ) {
                $this->user = \Auth::user();
            }
            var_dump($this->user);

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

《Laravel 5.3升级指南》中描述了这一变化-请查看构造函数中的部分

谢谢,我还以为我疯了呢。注意,我们必须
返回$next($request)从中间件函数@bleeteddod Right中,我将此添加到答案中
public function __construct()
{
    $this->middleware(function ($request, $next) {
        $this->user = auth()->user();

        return $next($request);
    });
}
public function __construct()
{
     $this->middleware(function ($request, $next) {
             if(\Auth::check() ) {
                $this->user = \Auth::user();
            }
            var_dump($this->user);

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