Laravel 11 迁移至 12 需升级 PHP ≥ 8.3、curl ≥ 7.40,更新 composer.json 中 framework、collision、sanctum 等依赖版本;调整应用结构为扁平化(控制器移至 app/、命名空间改为 App\);显式注册服务提供器与 RabbitMQ 配置;API 路由需手动添加 'api' 中间件组,闭包路由请求类型提示须用 Illuminate\Http\Request。

Laravel 11 迁移到 Laravel 12 不是简单改个版本号的事,核心变化集中在依赖要求、结构约定和部分组件行为上。官方尚未发布正式的 Laravel 12,但根据当前(2026年10月)已知的开发动向与社区实践,升级需重点关注以下几类配置调整。
PHP 和扩展依赖必须升级
Laravel 12 要求 PHP ≥ 8.3(Laravel 11 为 8.2),且强制依赖 curl ≥ 7.40。若当前环境未达标,需先升级运行时:
- 确认
php -v输出不低于 8.3.0 - 检查
php -m | grep curl,确保 cURL 版本 ≥ 7.40 - 更新
composer.json中关键包版本:"laravel/framework": "^12.0""nunomaduro/collision": "^9.0""laravel/sanctum": "^5.0""laravel/scout": "^11.0"
(其他如 Breeze、Jetstream、Octane 等也需同步升至对应 v12 兼容版)
应用结构与自动加载路径调整
Laravel 12 进一步强化「扁平化」目录结构,默认不再生成 app/Providers 或 app/Http/Controllers 等子目录,所有类统一置于 app/ 下,并按 PSR-4 规则命名空间:
- 若项目仍使用
app/Http/Controllers,需将控制器文件移至app/,并更新命名空间为App\(而非App\Http\Controllers) - 服务提供器(如
AppServiceProvider)默认不再自动生成,需手动创建并注册到config/app.php的providers数组中 - 模型若已迁移至
app/Models,需确保config/auth.php中的'model' => App\Models\User::class等路径准确无误
RabbitMQ 等第三方队列驱动需显式适配
沿用 Laravel 11 的 RabbitMQ 配置在 12 中会直接失败,因底层驱动初始化逻辑更严格:
-
VladimirYuldashev\LaravelQueueRabbitMQ\LaravelQueueRabbitMQServiceProvider仍需手动注册,不可依赖 auto-discovery -
RABBITMQ_DSN彻底失效,必须使用独立字段:RABBITMQ_HOST、RABBITMQ_PORT、RABBITMQ_VHOST、RABBITMQ_LOGIN、RABBITMQ_PASSWORD - SSL 连接必须显式设置
'options' => ['ssl_options' => [...]],空值或缺失会导致静默连接超时
路由与中间件注册方式微调
Laravel 12 的路由加载机制优化了中间件绑定粒度,尤其影响 API 路由组:
-
routes/api.php默认不再自动包裹api中间件组,需显式添加:Route::middleware('api')->group(function () { ... }); - 闭包路由中对请求对象的类型提示改为
Illuminate\Http\Request,旧写法Request(未 use)将报错 -
Route::fallback()行为更严格,仅匹配完全无定义的路径,不继承父组前缀


















