Php laravel 5.4:无法访问_构造方法中的Auth::user()
在以前版本的Laravel中,在我需要访问登录用户的控制器中,我使用的所有方法如下所示:Php laravel 5.4:无法访问_构造方法中的Auth::user(),php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,在以前版本的Laravel中,在我需要访问登录用户的控制器中,我使用的所有方法如下所示: class DashboardController extends Controller { private $user ; function __construct(Request $request) { $this->middleware('auth'); $this->user = \Auth::user(); }
class DashboardController extends Controller
{
private $user ;
function __construct(Request $request)
{
$this->middleware('auth');
$this->user = \Auth::user();
}
function func_1(){
$objects = Objects::where('user_id' , $this->user->id )->get();
}
function func_2(){
$objects = Objects::where('user_id' , $this->user->id )->get();
}
function func_3(){
$objects = Objects::where('user_id' , $this->user->id )->get();
}
主要是因为我不喜欢默认语法\Auth::user()
,但在升级到5.4之后,这不再起作用,我从$this->user获得null
不过,它在其他方法中也可以正常工作。基本上\Auth::user()
在\uu构造方法中返回null
,但在其他函数中工作正常。如所述:
在以前版本的Laravel中,您可以访问会话变量或
控制器构造函数中经过身份验证的用户。这是
从未打算成为框架的明确特征。在拉维尔
5.3,您无法访问控制器构造函数中的会话或经过身份验证的用户,因为中间件尚未运行
所以试试这个:
public function __construct()
{
$this->middleware('auth');
$this->middleware(function ($request, $next) {
$this->user = Auth::user();
return $next($request);
});
}
在使用命名空间加载类之前,必须定义Auth方法。请参见以下示例:
namespace App\Http\Controllers\Admin;
use Illuminate\Support\Facades\Input;
use Auth;
class DashboardController extends Controller
{
private $user ;
function __construct(Request $request)
{
$this->middleware('auth');
$this->user = Auth::user();
}
function func_1(){
$objects = Objects::where('user_id' , $this->user->id )->get();
}
function func_2(){
$objects = Objects::where('user_id' , $this->user->id )->get();
}
function func_3(){
$objects = Objects::where('user_id' , $this->user->id )->get();
}
之后,如果需要,可以清理缓存。
php artisan配置:缓存的可能重复项