laravel让用户进入控制器中间件

时间:2018-06-05 11:12:07

标签: php laravel

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

        });
        echo $this->user;
        exit;
}

问题在于,当我在中间件函数中回显用户时,我得到用户他的数据打印好了,这意味着他被登录,但是如果我在函数外回显相同的变量它是null,但是例子表明它必须填充数据,我做错了什么?

2 个答案:

答案 0 :(得分:1)

似乎是变量范围的问题。

当您在函数内定义和分配varialbe的值时,您无法从外部访问它。

相反,如果你喜欢这样,它应该有效:

function __construct() {
     public $user = '';    // Declared it here,
     $this->middleware('auth');
        $this->middleware(function ($request, $next) {
                $this->user = \Auth::user()->role;    // assigned a value here,

        });
        echo $this->user;    // It will print here.
        exit;
}

变量$this->user将是一个对象,所以我相信echo不会起作用。如果您想检查其值,请改用print_r($this->user);,如果您想在其他功能中访问它,请return $this->user

答案 1 :(得分:0)

如果您需要中间件内的用户在控制器中进行设置。这样做更简单,可以在中间件中完成。

public function __construct(Request $request)
{
    $this->user = $request->user();

    dd($this->user);
}

此解决方案要求用户已由Auth加载。这在某些时候可以为null,并且对于Laravel中的路由列表生成,这将使用null用户调用。如果这仍然不起作用,我不相信您的用户已设置或Auth中间件已初始化。