Laravel视图异常:尝试获取非对象的'follows'属性
解决Facade\Ignition\Exceptions\ViewException: 尝试获取非对象的'follows'属性问题
这个错误的核心原因很明确:当你调用auth()->user()->follows时,auth()->user()返回的是null(也就是当前没有用户登录),而你试图从一个非对象(null)上获取follows属性,所以抛出了这个视图异常。
下面是几个直接可行的解决方案:
1. 用登录校验包裹代码块
最直接的办法就是确保只有登录用户才会执行这段获取关注列表的代码,Laravel的Blade模板提供了@auth指令可以帮你做到这一点:
@auth <h3 class="font-bold text-lg mb-4 block">Following</h3> <ul> @foreach (auth()->user()->follows as $user) <li class="mb-2"> <div class="flex items-center text-sm"> <img src="{{ $user->avatar }}" alt="{{ $user->name }}" class="rounded-full mr-2"> {{ $user->name }} </div> </li> @endforeach </ul> @endauth
这样当用户未登录时,这段代码会被直接跳过,不会触发错误。
2. 确认User模型的关联定义正确
如果用户确实已经登录,但还是报错,那你需要检查User模型里的follows关联是否正确定义了。比如这是一个用户之间的多对多关注关系,你的模型方法应该类似这样:
// app/Models/User.php public function follows() { // 这里的参数根据你的实际数据表结构调整 return $this->belongsToMany(User::class, 'follows', 'follower_id', 'following_id'); }
同时要确保你的follows数据表存在,并且包含follower_id和following_id这两个外键字段,关联到users表的id。
3. 处理未登录时的提示(可选)
如果你想在用户未登录时显示友好提示,而不是直接隐藏内容,可以结合@guest指令:
@auth <h3 class="font-bold text-lg mb-4 block">Following</h3> <ul> @foreach (auth()->user()->follows as $user) <li class="mb-2"> <div class="flex items-center text-sm"> <img src="{{ $user->avatar }}" alt="{{ $user->name }}" class="rounded-full mr-2"> {{ $user->name }} </div> </li> @endforeach </ul> @else <p class="text-sm text-gray-500">请登录后查看关注列表</p> @endauth
快速调试小技巧
如果你不确定问题是不是出在未登录,可以在视图里临时添加一行代码看看当前用户状态:
{{ dd(auth()->user()) }}
如果输出是null,那就是用户未登录的问题;如果是用户对象,再去检查follows关联是否正确。
内容的提问来源于stack exchange,提问作者sharf pirzada
相关产品推荐
相关产品推荐

