我想在应用程序中使用User类。所以,我想创建CustomUser,然后将其注入需要它的控制器(它们中的大多数都是)。
现在,我在serviceprovider中创建一个空实例。接下来,我想用已经保存在Auth :: user()中的数据填充它。很长一段时间后,我还没有找到去哪里做。
Auth :: user()在中间件中是空的,但是在控制器中填充了用户数据。我错过了Laravel查询数据库并用数据填充Auth:user()的步骤。我想避免再次进行相同的查询。
感谢您的帮助!
答案 0 :(得分:2)
自Laravel 5.3起,您无法访问控制器构造函数中的sessions
。这是因为中间件还没有运行。我知道它很难找到,但是在5.2的迁移文档中> 5.3(您可能在5.4上),它表明从会话中解析数据的正确方法(其中auth()只是一个围绕session()调用以获取用户的包装器),是使用以下方法:
class MyController extends Controller {
protected $user;
public function __construct() {
$this->middleware(function ($request, $next) {
$this->user= auth()->user();
return $next($request);
});
}
}
然后$this->user
会将auth
用户引用到此控制器内的任何方法。
希望他的帮助。
答案 1 :(得分:2)
您可以将基本控制器与__get()
method一起使用。例如:
class Controller
{
public function __get(string $name)
{
if($name === 'user'){
return Auth::user();
}
return null;
}
}
在子控制器中可以调用$this->user
答案 2 :(得分:0)
在Laravel 5.6中我使用了这个
$this->middleware(function ($request, $next) {
$id = Auth::user()->id;
$res = $this->validateAnyFunction($id);
if(!$res){
//to redirect to any other route
return $next(redirect()->route("any")->with("failed","Invalid")->send());
}
//this is used to proccess futher funcitons of controller
return $next($request);
});