必须分两步升级:先升至Laravel 10,再升至11,不可跳过10;需确保PHP≥8.2、Composer≥2.5.0,删除"minimum-stability":"dev",同步更新全套依赖并清理缓存。

从 Laravel 9 直接升级到 11 不是改个版本号就能跑通的事,中间跳过 10 版本会导致依赖解析失败、symfony 组件错位、类找不到等硬性报错,必须分阶段重建依赖树并同步清理废弃约束。
确认基础环境是否达标
先执行 php -v,输出必须为 PHP 8.2.x;Laravel 11 不兼容 PHP 8.1 或更低版本,哪怕只差 0.0.1 也会在 composer update 阶段卡死并报 Your requirements could not be resolved。
运行 composer --version,确保 ≥ 2.5.0;低于此版本无法正确解析 Laravel 11 的新约束语法(如 "^11.0" 中的隐式稳定性策略)。
【必须删掉 composer.json 里的 "minimum-stability": "dev"】,否则 Composer 会尝试装入 laravel/framework 的 alpha/beta 快照,而 Laravel 11 稳定版不提供此类预发布包,直接导致 require 失败。
分两步走:先升到 Laravel 10,再升到 11
第一步:把 "laravel/framework": "^9.0" 改成 "laravel/framework": "^10.0",同时批量替换配套包版本:
→ "nunomaduro/collision": "^7.0"
→ "spatie/laravel-ignition": "^2.0"
→ "phpunit/phpunit": "^10.0"
→ "laravel/sanctum": "^3.2"
→ "doctrine/dbal": "^3.0"
删掉所有 require-dev 里非 PHPUnit 10 兼容的测试辅助包(比如 phpunit-speedtrap),它们会阻塞依赖解析。
执行 composer update --with-all-dependencies,这个参数强制重算整棵依赖树,避免子依赖被跳过——漏升一个 symfony/console 就会让 php artisan 命令直接退出无提示。
第二步:确认 php artisan --version 输出为 Laravel Framework 10.x 后,再修改 composer.json:
→ 把 "laravel/framework": "^10.0" 换成 "laravel/framework": "^11.0"
→ "nunomaduro/collision": "^8.0"
→ "spatie/laravel-ignition": "^3.0"
→ "phpunit/phpunit": "^11.0"
→ "laravel/pennant": "^3.0"(Laravel 11 新增必需包)
注意:Laravel 11 移除了 Http/Kernel.php 和 Console/Kernel.php 的基类继承链,如果你项目里手动 extends 这两个文件,现在必须删掉或重写为函数式配置入口,否则 composer dump-autoload 会报 Class not found。
重装 autoload 并验证骨架完整性
运行 composer dump-autoload -o,生成优化后的 class-map;这一步不能跳,Laravel 11 的流式目录结构依赖新的 PSR-4 映射规则,旧的 autoload.php 会漏加载 app/Actions 或 app/Enums 下的类。
检查 app/Providers/AppServiceProvider.php 是否存在——如果不存在,说明你之前没用 composer create-project 初始化项目,而是手动 require 搭建的,这种项目骨架缺失,php artisan key:generate 会报 Command not found。
执行 php artisan config:clear && php artisan cache:clear,清掉旧版配置缓存;Laravel 11 的 config/logging.php 结构已重构,残留缓存会导致日志通道初始化失败。
最后跑一次 php artisan serve,看到 Starting Laravel development server 且首页能正常渲染,说明依赖树重建完成。


















