Laravel 中处理 API 返回数组时的常见错误:非对象属性访问问题
发布时间 - 2026-01-11 00:00:00 点击率:次当使用 laravel 从 api(如 rawg)获取数据时,若误将数组当作对象访问(如 `$result->name`),会触发 “trying to get property 'name' of non-object” 错误;根本原因是 api 响应为关联数组而非 stdclass 对象,需统一使用数组语法访问。
在调用类似 RAWG 这类 RESTful
API 时,第三方 SDK(如 \Rawg::load('games')->get())通常默认返回的是 关联数组(尤其是 JSON 解析后未强制转为对象),而非 PHP 对象。因此,直接使用对象箭头语法($result->name)会导致运行时错误 —— 因为 $result 实际是 array 类型,不支持 -> 访问。
正确做法是:
✅ 明确识别响应结构(可通过 dd($response) 或 var_dump($response) 调试);
✅ 确认数据位于 $response['results'](而非直接遍历 $response);
✅ 所有字段均使用数组下标语法($result['key']),嵌套结构同理。
以下是修正后的完整示例代码:
$response = \Rawg::load('games')
->setParams([
'page' => 1,
'page_size' => 40,
'ordering' => '-rating',
])
->get();
// 关键修正:遍历 $response['results'],且全部使用数组语法
if (isset($response['results']) && is_array($response['results'])) {
foreach ($response['results'] as $result) {
// 注意:ratings 和 platforms 均为数组,需校验索引存在性
$ratingTitle = !empty($result['ratings'][0]['title'])
? $result['ratings'][0]['title']
: null;
$platformName = !empty($result['platforms'][0]['platform']['name'])
? $result['platforms'][0]['platform']['name']
: null;
Games::insert([
'name' => $result['name'] ?? 'Unknown Game',
'ratings' => $ratingTitle,
'platforms' => $platformName,
]);
}
}⚠️ 重要注意事项:
- 永远不要假设嵌套数组索引一定存在 —— ratings[0] 或 platforms[0] 可能为空或缺失,务必使用 !empty() 或 ?? 提供默认值,避免“Undefined index”错误;
- 若需更健壮的数据提取逻辑,建议封装为辅助方法或使用 Laravel 的 data_get() 辅助函数(例如:data_get($result, 'ratings.0.title'));
- 如需强制返回对象,可在 HTTP 客户端层设置 json_decode($json, false),但需确保 SDK 支持该配置;多数情况下,适配数组结构更安全、更符合 REST API 实际响应规范。
总结:该错误本质是类型误判,解决核心在于「看清数据结构、用对访问语法、做好空值防护」。
# php
# laravel
# js
# json
# rest api
# restful api
# restful
# Array
# Object
# 关联数组
# 封装
# 数据结构
# Property
# undefined
# 对象
# http
# 而非
# 遍历
# 的是
# 尤其是
# 均为
# 这类
# 可在
# 不支持
# 可通过
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
焦点电影公司作品,电影焦点结局是什么?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
非常酷的网站设计制作软件,酷培ai教育官方网站?
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何在IIS中新建站点并配置端口与物理路径?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何基于云服务器快速搭建个人网站?
高端建站三要素:定制模板、企业官网与响应式设计优化
如何在Ubuntu系统下快速搭建WordPress个人网站?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
教你用AI将一段旋律扩展成一首完整的曲子
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Laravel distinct去重查询_Laravel Eloquent去重方法
进行网站优化必须要坚持的四大原则
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
Laravel如何优化应用性能?(缓存和优化命令)
Laravel如何处理异常和错误?(Handler示例)
Laravel Docker环境搭建教程_Laravel Sail使用指南
C++时间戳转换成日期时间的步骤和示例代码
企业网站制作这些问题要关注
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
智能起名网站制作软件有哪些,制作logo的软件?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
简单实现jsp分页
iOS验证手机号的正则表达式
如何挑选优质建站一级代理提升网站排名?
如何快速搭建高效简练网站?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
如何用5美元大硬盘VPS安全高效搭建个人网站?
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel如何使用withoutEvents方法临时禁用模型事件
C#如何调用原生C++ COM对象详解
原生JS实现图片轮播切换效果
如何登录建站主机?访问步骤全解析
如何获取上海专业网站定制建站电话?
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
Laravel如何实现事件和监听器?(Event & Listener实战)
音乐网站服务器如何优化API响应速度?

