Laravel:同一视图调用菜单与用户表数据及显示异常排查
解决Laravel视图无法显示当前用户信息的问题
核心问题
你在MenuController的index方法中注入的User $user是路由模型绑定,但你的路由未传递用户ID参数,导致这个$user是一个空的User实例,而非当前登录用户的数据。而你已经通过Auth::user()获取了当前登录用户,只需直接使用这个实例即可。
修改后的MenuController代码
namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Models\Menu; use App\Models\User; class MenuController extends Controller { public function index() { // 获取当前登录用户实例 $user = Auth::user(); // 获取该用户关联的菜单数据 $menus = $user->menus()->get(); // 直接传递user对象和菜单数据到视图 return view('menus.index', [ 'menus' => $menus, 'user' => $user ]); } // 其他无关代码省略 }
为什么这样修改?
- 路由模型绑定需要路由中包含
{user}参数(例如/dashboard/menu/{user}),但你的路由显然没有这个参数,所以注入的$user是空对象,自然无法读取name等字段。 Auth::user()会返回当前已登录用户的完整数据库实例,包含所有你需要的字段(name、tittle、bio等)。
视图部分无需修改
你的视图代码中{{ $user->name }}写法正确,修改控制器后即可正常显示用户名称。
额外注意事项
- 确保该路由已添加
auth中间件,强制用户登录后才能访问:// 在routes/web.php中配置 Route::get('/dashboard/menu', [MenuController::class, 'index'])->middleware('auth'); - 检查User模型中的字段名是否与数据库一致,比如
tittle是否是数据库中的实际字段(可能是title的拼写错误)。
内容的提问来源于stack exchange,提问作者caktasnino
相关产品推荐
相关产品推荐

