在Laravel的早期版本中,在我需要使用以下所有方法访问登录用户的控制器中:
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之后,这不再起作用了,我从null
获得$this->user
但它在其他方法中工作正常。基本上\Auth::user()
会在null
方法中返回__construct
,但在其他函数中可以正常工作。
答案 0 :(得分:14)
正如doc所说:
在早期版本的Laravel中,您可以访问会话变量或 控制器构造函数中经过身份验证的用户。这是 从来没有打算成为框架的明确特征。在Laravel 5.3,您无法访问控制器构造函数中的会话或经过身份验证的用户,因为中间件尚未运行。
所以试试这个:
public function __construct()
{
$this->middleware('auth');
$this->middleware(function ($request, $next) {
$this->user = Auth::user();
return $next($request);
});
}
答案 1 :(得分:0)
您必须在使用命名空间加载类之前定义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 config:cache