function __construct() {
$this->middleware('auth');
$this->middleware(function ($request, $next) {
$this->user = \Auth::user();
});
echo $this->user;
exit;
}
问题在于,当我在中间件函数中回显用户时,我得到用户他的数据打印好了,这意味着他被登录,但是如果我在函数外回显相同的变量它是null,但是例子表明它必须填充数据,我做错了什么?
答案 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中间件已初始化。