全新安装Laravel Lumen 8.x出现getRoutes()调用错误如何解决?
Lumen 8.x 调用getRoutes()报错修复方案
你遇到的报错信息:
local.ERROR: Uncaught Error: Call to a member function getRoutes() on array in Command line code:1
错误原因
该错误是直接将Laravel的路由操作代码迁移到Lumen中导致的,Lumen的路由存储逻辑与Laravel不同,Lumen中app('router')默认返回的是路由数组而非Laravel那样的路由管理对象,直接调用getRoutes()方法就会触发数组调用成员方法的错误。报错提示为Command line code说明触发位置是命令行执行的代码,包括自定义Artisan命令、php artisan tinker执行的语句。
修复步骤
- 第一步:定位触发代码,优先排查最近新增的自定义Artisan命令代码、你在tinker中执行的路由相关语句,找到调用
getRoutes()的代码行。 - 第二步:替换错误的路由获取写法:
如果你需要获取Lumen中所有已注册的路由,使用Lumen专属写法即可:
直接删除原有的$routes = app()->getRoutes();app('router')->getRoutes()这类Laravel风格的代码。 - 第三步:排查启动文件修改,检查
bootstrap/app.php中是否有手动覆盖router绑定的代码,比如类似$app->instance('router', [])的错误配置,找到后直接删除即可。 - 第四步:第三方包兼容排查,如果报错是安装新扩展包后出现的,确认该扩展是否支持Lumen,不支持的话更换为Lumen适配版本,或者在服务提供者注册时跳过该扩展的路由注册逻辑。
临时日志清理
如果要快速清理被占满的日志文件,在项目根目录执行以下命令即可:
rm storage/logs/*.log
Lumen会在下次需要记录日志时自动创建新的日志文件,不会影响业务运行。
内容的提问来源于stack exchange,提问作者Iglebekk
相关产品推荐
相关产品推荐

