能升,但必须从 Laravel 9.x 升级到 10.x,不可跳过;需满足 PHP ≥8.1、Composer ≥2.2,同步更新依赖、路由语法、缓存及废弃 API,并手动处理结构变更与关键链路验证。

能升,但必须从 Laravel 9.x 升级到 10.x,不能跳过中间版本;PHP ≥8.1、Composer ≥2.2 是硬性门槛,配套包、路由写法、缓存清理和废弃 API 都要同步处理,否则很容易在部署后突然报错或功能静默失效。
确认当前环境是否满足基础要求
升级前先验证三件事,缺一不可:
- 运行 php -v 确认 PHP 版本 ≥8.1.0 —— 如果是 8.0 或更低,
composer update会直接失败,提示 Your requirements could not be resolved - 运行 composer --version 确保 Composer ≥2.2.0 —— 旧版无法正确解析 Laravel 10 的依赖约束
- 运行 php artisan --version 或查看
composer.json中"laravel/framework"的值,确认当前确实是 9.x(如^9.52),不是 8.x 或已误装 10.x
检查并更新 composer.json 中的关键依赖
只改 "laravel/framework": "^9.0" 为 "^10.0" 是最常见翻车点。必须同步调整以下几项:
- 把
"nunomaduro/collision": "^6.0"升到"^7.0" - 把
"spatie/laravel-ignition": "^1.0"升到"^2.0" - 把
"phpunit/phpunit": "^9.0"升到"^10.0",同时删掉phpunit.xml中的processUncoveredFiles属性 - 把
"laravel/sanctum": "^2.0"升到"^3.2","doctrine/dbal": "^2.0"升到"^3.0" - 将
"minimum-stability": "dev"或类似非稳定设置改为"stable",避免意外装入 beta 版本 - 显式声明 PHP 版本约束:
"php": "^8.1",防止 Composer 沿用旧约束导致降级
手动处理结构变更与废弃行为
自动工具不会帮你改这些,漏掉就可能首页能打开、登录却 500:
-
Route::controller()已被彻底移除,所有Route::get('/users', 'UserController@index')必须改为使用完全限定类名:[App\Http\Controllers\UserController::class, 'index'] -
AuthServiceProvider@boot中调用的$this->registerPolicies()可以删掉,框架会自动执行 - Redis 缓存标签逻辑重写,需在
App\Console\Kernel的schedule方法中添加:$schedule->command('cache:prune-stale-tags')->hourly(); - 数据库迁移中若用到
change()修改字段,注意它可能破坏外键约束 —— 建议改用原生 SQL 或分步操作 -
$middlewareGroups['api']不再默认包含限流中间件,需手动补回\Illuminate\Routing\Middleware\ThrottleRequests::class,否则接口裸奔
升级后必须验证的几件事
别只看首页是否能打开,这几个关键链路必须手动测一遍:
- 运行 php artisan tinker,确认能正常进入,不报 Facade 或 Class 找不到
- 发一个核心 POST 请求(如登录、表单提交),检查返回状态码是 200 还是 419/500
- 执行 php artisan migrate:status,确认所有迁移标记为 Ran,没有混杂状态
- 运行 php artisan queue:work --once 或 dispatch 一个测试 Job,验证队列能否进、能出、能消费
- 彻底清除四类缓存:
php artisan config:clear、php artisan cache:clear、php artisan view:clear、php artisan route:clear

















