做 Laravel 的人,大概都经历过这种场景👇
页面一片空白、接口直接 500、啥提示没有,浏览器只给你一句:
Whoops, something went wrong.
这时候你要是只会改代码试运气,那基本就是在“蒙”。
这篇文章不讲虚的,按真实排错顺序,把 Laravel 报错从「看到错误」→「定位问题」→「解决问题」这一整套流程梳理一遍,新手老手都能直接用。
一、先别急着改代码,90% 的人第一步就错了
Laravel 报错,第一反应不是看代码,而是看错误来源。
很多人一上来就开始:
- 怀疑控制器
- 怀疑模型
- 怀疑路由
- 甚至重装依赖
结果折腾半天,发现其实只是 env 配置写错了一个值。
正确顺序永远是:
页面表现 → 日志 → 错误类型 → 对应源码
二、Laravel 报错,日志一定是第一入口
1️⃣ Laravel 错误日志在哪?
默认路径:
storage/logs/laravel.log
线上环境 / 本地环境都一样。
如果你连这个文件都没看,那基本属于“闭眼排错”。
2️⃣ 日志里重点看什么?
打开 laravel.log,别被一堆内容吓到,重点只看三样:
- error / exception
- 报错文件路径
- 报错行号
典型日志结构大概是这样:
production.ERROR: Undefined index: name
at /app/Http/Controllers/UserController.php:45
你只需要记住一句话:
Laravel 已经告诉你:哪一行代码出问题了
三、页面空白 or 500?先判断是哪一类错误
情况 1:页面直接 500,没有任何提示
这是最常见的新手坑。
先检查 .env:
APP_DEBUG=true
开发环境一定要开,否则你永远只能看到 500。
⚠️ 注意:
- 线上环境一定要关
- 本地 / 测试环境必须开
情况 2:页面有报错信息,但信息很多
恭喜你,这是好事。
说明:
- 错误已经被 Laravel 捕获
- 日志一定有对应记录
别全看,只抓关键信息:
- 报错类型(Undefined index / SQLSTATE / Call to member function)
- 文件 + 行号
四、最常见的 Laravel 报错类型 & 排查思路
1️⃣ Undefined index / Undefined offset
本质原因:
- 你访问了一个不存在的数组下标
典型错误写法:
$name = $data['name'];
但 $data 里根本没有 name。
排查思路:
- 看日志行号
- dump 一下变量内容
- 判断数据来源是否可靠
建议写法:
$name = $data['name'] ?? null;
2️⃣ SQLSTATE 报错(数据库相关)
常见原因:
- 字段不存在
- 类型不匹配
- where 条件拼错
排查顺序:
- 看完整 SQL
- 在数据库里手动执行
- 再回头改 Eloquent / Query Builder
不要盲改模型,SQL 是唯一真相。
3️⃣ Call to a member function on null
说明一点:
- 你以为有对象
- 实际上是 null
常见场景:
- 查询结果为空
- 关联模型没查到
排查方式:
dd($model);
如果是 null,就说明问题不在“方法”,而在“数据”。
五、日志有了,还是定位不到?从源码往回查
这是进阶排错能力。
1️⃣ 顺着调用链往上找
Laravel 报错通常会给你一整条调用栈:
- Controller
- Service
- Model
- Trait
原则只有一个:
找你自己写的第一行代码
框架代码先别管。
2️⃣ 不要怕用 dd / dump
很多人觉得:
“老是 dd,很 low”
但现实是:
- 80% 的问题
- 一个
dd()就能看出来
高效比“优雅”重要。
六、Laravel 队列、定时任务报错,别在页面找
如果你用到了:
- queue
- schedule
- job
页面是永远看不到错误的。
正确姿势:
php artisan queue:work
然后看控制台 + laravel.log。
很多“任务不执行”,其实是 任务早就失败了,只是你没看日志。
七、一个通用的 Laravel 排错流程(记住这个)
最后给你一套通用排错清单,以后遇到问题直接照着走:
- 页面是空白、500、还是有提示?
.env里APP_DEBUG是否正确?- 查看
storage/logs/laravel.log - 定位文件 + 行号
- 判断错误类型(数据 / 配置 / 数据库 / 逻辑)
- 用
dd()验证真实数据 - 再改代码
先定位,再修改,别反着来
写在最后
Laravel 并不难,难的是不会看错误。
你一旦掌握了:
- 看日志
- 识别错误类型
- 顺着调用链查
以后再遇到 500、空白页、奇怪报错,基本都能稳住。