Laravel登录控制器传参至Blade报错:Undefined variable $userDataa
Laravel登录后传递用户变量报错"Undefined variable $userDataa"的解决办法
问题根源
- 路由逻辑不统一:你在
LoginController中直接返回home视图并传递变量,但用户后续刷新页面或直接访问/home路由时,HomeController的index方法仅返回视图,未传递$userDataa,导致变量未定义报错。 - 冗余查询:登录成功后
auth()->user()已能直接获取当前用户,无需额外执行User::find($id)重复查询。
方案一:统一路由逻辑,通过控制器传递变量
1. 修改HomeController的index方法
确保每次访问/home都传递用户数据:
public function index() { $userDataa = auth()->user(); return view('home', compact('userDataa')); }
2. 修正LoginController的登录逻辑
不要直接返回视图,统一重定向到home路由:
public function login(Request $request) { $input = $request->all(); $this->validate($request,[ 'email'=>'required|email', 'password'=>'required' ]); if(auth()->attempt(['email'=>$input['email'],'password'=>$input['password']])) { if(auth()->user()->is_admin == 1) { return redirect()->route('admin.home'); }else{ return redirect()->route('home'); } }else{ return redirect()->route('login')->with('error','يجب إدخال كل الحقول بشكل صحيح'); } }
方案二:直接在视图中使用认证助手(推荐)
无需传递变量,Laravel认证系统已提供全局访问当前用户的方式,直接在Home.blade.php中修改:
<h3>Welcome in your Area </h3> {{ auth()->user()->name }}
简化后的LoginController:
public function login(Request $request) { $input = $request->all(); $this->validate($request,[ 'email'=>'required|email', 'password'=>'required' ]); if(auth()->attempt(['email'=>$input['email'],'password'=>$input['password']])) { return auth()->user()->is_admin == 1 ? redirect()->route('admin.home') : redirect()->route('home'); }else{ return redirect()->route('login')->with('error','يجب إدخال كل الحقول بشكل صحيح'); } }
HomeController保持原样:
public function index() { return view('home'); }
内容的提问来源于stack exchange,提问作者hossam hassan
相关产品推荐
相关产品推荐

