Laravel 8 如何避免路由模型绑定传入不存在模型时的报错问题
Laravel 8 隐藏资源不存在时的详细报错信息解决方案
方法1:全局关闭Debug模式(生产环境优先选择)
Laravel输出完整报错栈是因为开启了调试模式,关闭后所有异常都不会返回敏感的服务器、代码信息:
- 打开项目根目录下的
.env配置文件,找到APP_DEBUG参数,将值修改为false
APP_DEBUG=false
- 执行命令
php artisan config:clear清空配置缓存即可生效。
方法2:自定义异常返回逻辑(适合需要保留Debug模式的开发场景)
如果本地开发需要保留Debug模式,仅针对API请求的404异常做特殊处理,可以修改异常处理器:
- 打开
app/Exceptions/Handler.php文件,更新render方法:
use Illuminate\Database\Eloquent\ModelNotFoundException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; public function render($request, Throwable $exception) { // 仅处理API类型的请求 if ($request->expectsJson()) { // 捕获模型不存在、路由不存在两类404异常 if ($exception instanceof ModelNotFoundException || $exception instanceof NotFoundHttpException) { return response()->json([ 'message' => '请求的资源不存在' ], 404); } } return parent::render($request, $exception); }
配置后不管Debug模式是否开启,API请求不存在的资源时只会返回你自定义的错误提示,不会泄露文件路径、调用栈等信息。
内容的提问来源于stack exchange,提问作者Petro Gromovo
相关产品推荐
相关产品推荐

