Laravel报错:Trying to get property 'role' of non-object 求解
报错根因
Trying to get property 'role' of non-object报错触发逻辑非常明确:你在指定的卖家后台头部视图中,尝试对一个非对象类型的值(绝大多数场景是null)读取role属性。
最常见的触发场景:
- 视图里直接写了
auth('seller')->user()->role这类链式调用,当卖家登录态失效、未登录、或者对应账号数据被软删/硬删时,auth('seller')->user()返回null,继续取->role直接触发报错 - 控制器/视图共享数据传入的卖家、管理员对象为空,未做校验直接读取
role属性 App\CPU\Helpers.php中自定义的角色获取、当前用户获取辅助函数没有做空值兜底,返回空值后在视图调用时报错
修复方案
按优先级从高到低操作即可:
1. 路由层加鉴权中间件(根治)
该报错本质是卖家后台路由漏加登录鉴权,未登录用户可以直接访问到需要登录态的页面渲染逻辑。
打开路由文件,找到卖家后台的路由分组,追加卖家登录鉴权中间件:
Route::group(['prefix' => 'seller', 'middleware' => ['auth:seller']], function () { // 所有卖家后台需登录访问的路由全部移入该分组 });
配置完成后,未登录/登录失效的访问会自动跳转到卖家登录页,不会再执行视图渲染逻辑,从根源规避报错。
2. 视图层加空值兜底(快速修复)
打开报错视图文件/home/public_html/resources/views/layouts/back-end/partials-seller/_header.blade.php,全局搜索所有->role的调用位置,替换为空值安全的写法:
{{-- 原错误写法示例 --}} @if(auth('seller')->user()->role == 'seller') <span>{{ $seller->role }}</span> {{-- 替换为以下任意一种写法 --}} {{-- 写法1:使用Laravel自带optional辅助函数包裹对象 --}} @if(optional(auth('seller')->user())->role == 'seller') <span>{{ optional($seller)->role }}</span> {{-- 写法2:先做登录态/空值判断再取属性 --}} @if(auth('seller')->check() && auth('seller')->user()->role == 'seller') @if(!is_null($seller) && $seller->role) <span>{{ $seller->role }}</span> @endif
3. 辅助函数逻辑修复
打开App\CPU\Helpers.php,找到所有获取当前用户、获取用户角色的自定义方法,追加空值兜底,避免返回非对象结果:
// 错误写法示例 function current_seller_role() { return auth('seller')->user()->role; } // 修复后写法 function current_seller_role() { $user = auth('seller')->user(); return $user ? $user->role : 'guest'; // 也可以写成 return optional(auth('seller')->user())->role ?? 'guest'; }
修复完成后执行php artisan view:clear清除视图缓存即可生效。
内容的提问来源于stack exchange,提问作者tube8
相关产品推荐
相关产品推荐

