必须逐个主版本升级,Laravel 5.8→6.0需满足PHP≥7.2、备份配置与锁包,更新composer.json后运行composer update --with-all-dependencies,并修正MigrationServiceProvider移除、RegisterController父方法调用及viewAny策略等高影响变更。

确认前提条件
升级前务必满足以下三点,否则后续命令会失败或埋下隐患:
- PHP 版本 ≥ 7.2(Laravel 6 不再支持 PHP 7.1)
- 已备份
composer.lock、.env和config/目录(特别是config/app.php) - 所有测试通过,尤其是涉及
Auth、中间件、路由模型绑定的用例
更新依赖与执行升级
修改 composer.json 中的框架约束:
"laravel/framework": "^6.0"
同时检查并更新其他核心依赖,例如:
-
"php": "^7.2"(确保 Composer 能识别) - 移除或锁定第三方包,避免自动拉取不兼容版本(如
spatie/laravel-permission需对应 v2.x)
运行升级命令:
composer update "laravel/framework" --with-all-dependencies
加 --with-all-dependencies 是为了防止 illuminate/* 子包版本错乱,这是 Laravel 6 升级中最常见的报错根源。
处理高影响变更
以下几处改动若忽略,项目极可能启动失败或权限失效:
-
MigrationServiceProvider 被移除:如果你自定义过迁移命令(比如重写了
MigrateCommand或绑定了自己的MigrationRepositoryInterface),需改用DatabaseServiceProvider管理逻辑,否则会报Class Illuminate\Database\MigrationServiceProvider not found -
RegisterController 的注册流程变更:若重写了
register()或registered()方法,必须显式调用parent::register()和parent::registered(),否则Registered事件不会触发,新用户也无法自动登录 -
授权策略新增 viewAny:使用
authorizeResource()的控制器,现在要求策略中定义viewAny()方法,否则访问index会直接拒绝,不是 500 错误而是 403
验证与收尾
升级完成后立即执行:
-
php artisan config:clear && php artisan cache:clear(清除旧配置缓存) -
php artisan migrate:status确认迁移状态一致,如有遗漏可用php artisan migrate --path=xxx手动补跑 - 检查
app/Providers/AuthServiceProvider.php是否仍引用已废弃的Gate::before写法(6.0 推荐用策略类统一管理)
不复杂但容易忽略


















