Laravel执行php artisan optimize报类型错误无法优化如何解决
Laravel执行
php artisan optimize报类型错误修复 问题根因
这个报错是PHP强类型校验拦截导致的:路由缓存生成逻辑要求传入原生的Illuminate\Routing\RouteCollection路由集合实例,但实际拿到的是已经编译完成的CompiledRouteCollection实例,常见触发场景有两类:
- 升级Laravel框架前没清理旧缓存,新旧版本路由缓存逻辑不兼容,运行命令时框架直接读取了旧版本生成的已编译路由文件,跳过了正常的路由收集流程
- 自定义路由服务逻辑、第三方路由类扩展包提前触发了路由编译,替换了框架容器里绑定的原生路由集合实例
修复步骤
按顺序操作即可:
- 第一步先执行全量清缓存命令,删掉所有已生成的临时编译文件:
php artisan optimize:clear
这个命令会自动清理路由、配置、视图、运行时所有缓存,是处理这类缓存兼容问题的首选操作。
- 如果清完缓存还是报错,手动删除路由缓存文件:
打开项目下的bootstrap/cache/目录,把所有文件名以routes-开头的PHP文件删掉即可,不要改动这个目录里的其他文件。 - 排查自定义代码冲突:
检查app/Providers/RouteServiceProvider.php里的自定义逻辑,以及项目安装的第三方路由相关扩展包,确认没有在路由注册阶段提前调用路由编译方法、替换原生路由集合实例。 - 如果之前手动修改过vendor目录下的框架源码,执行下面的命令重新安装依赖,恢复框架原生代码:
composer install --no-dev -o
以上操作走完,再重新执行php artisan optimize就能正常运行了。
内容的提问来源于stack exchange,提问作者Keron Maurice
相关产品推荐
相关产品推荐

