我正在使用laravel 5.7,但是我无法在__construct()中获得当前的用户ID。
我也尝试了AUTH:ID(),但也无法正常工作。
如何在构造函数中获取当前用户ID?
use IlluminateSupportFacadesAuth;
class TestController extends Controller
{
public $id;
public function __construct()
{
$this->middleware('auth');
$this->middleware(function ($request, $next) {
$this->id = Auth::user()->id;
return $next($request);
});
dd($this->id);
}
}
当前输出为null。
您只能访问封闭式中的会话。只需对此进行重构代码:
public function __construct()
{
$this->middleware('auth');
$this->middleware(function ($request, $next) {
$this->id = Auth::user()->id;
dd($this->id);
return $next($request);
});
}
您现在可以在控制器方法中使用值$this->id
。
在您的问题中,在设置了值$this->id
之后,您将继续请求。由于您尝试在关闭范围之外访问$this->id
,因此它仍然是DataDaDump中的null
。
返回后,您不会转到下一个语句,这就是为什么它不打印。
如果要使用此视图,则无需在视图中传递,您可以像这样访问记录的用户ID
{{Auth->user->id}}
如果您要在控制器中使用它,请确保您已登录。
有时会话过期,那么您将无法获得用户ID
use IlluminateSupportFacadesAuth;
class TestController extends Controller
{
public $id;
public function __construct()
{
$this->middleware('auth');
$this->middleware(function ($request, $next) {
$this->id = Auth::user()->id;
dd($this->id);
return $next($request);
});
}
}
最简单的解决方案是创建中间件并在构造函数中稍后调用。
php artisan make:middleware FoobarMiddleware
我建议将别名放在kernel.php
中protected $routeMiddleware = [
...
'foobar' => AppHttpMiddlewareFoobarMiddleware::class,
]
构造函数:
public function __construct()
{
$this->middleware('auth');
$this->middleware('foobar');
}
我建议更改您如何创建所有内容的重点