laravel 11目录结构是系统性重构,核心是将启动逻辑、中间件、路由、异常处理等全部收口至bootstrap/app.php:删除app/http/kernel.php等文件,废弃routeserviceprovider,强制显式调用withrouting()、withmiddleware()等方法,路由默认只加载routes.php,配置大幅精简并入config/app.php或由环境变量驱动。

Laravel 11 的目录结构不是“微调”,而是围绕“显式化”和“收口”做的系统性重构。它把原来分散在多个文件、多个层级的启动逻辑、中间件注册、路由加载、服务提供者绑定,全部集中到 bootstrap/app.php 这一个入口中。Laravel 10 仍保持传统分层结构,更利于熟悉旧模式的团队渐进适应。
核心入口彻底统一:bootstrap/app.php 成唯一枢纽
这是最根本的变化。Laravel 11 废弃了过去依赖多个 Kernel 和 ServiceProvider 协同启动的方式:
- app/Http/Kernel.php 和 app/Console/Kernel.php 被默认删除,不再参与启动流程
- RouteServiceProvider 被移除,路由注册逻辑不再通过类方法驱动
- 所有关键配置必须写在 bootstrap/app.php 中,按顺序调用 ->withProviders()、->withRouting()、->withMiddleware()、->withExceptions()
- 顺序错乱(比如把 ->withMiddleware() 写在 ->withProviders() 前)会导致服务未注册就使用,运行时报错或静默失败
中间件注册从类文件迁移到闭包
原来在 app/Http/Kernel.php 中定义的 $middleware、$middlewareGroups、$routeMiddleware,现在必须手动写进 bootstrap/app.php 的 withMiddleware() 闭包里:
- web 中间件组需显式追加:$middleware->web(append: [EnsureEmailIsVerified::class])
- API 中间件组不再自动生成,要自己写 $middleware->api(...)
- 全局中间件、路由中间件、分组中间件全部统一管理,但失去类文件的 IDE 自动跳转和类型提示便利
- 原有 Kernel 文件若未删干净,可能引发 “Provider already registered” 或重复注册异常
路由组织方式转向单文件优先
Laravel 11 默认只加载 routes.php,不再自动引入 routes/web.php 和 routes/api.php:
- 新项目默认只有 routes.php,里面用 Route::middleware('web')->group() 和 Route::middleware('api')->group() 分隔逻辑
- 若坚持沿用多文件结构,必须手动 require 并显式调用 Route::middleware(...),否则路由不生效
- routes/web.php 和 routes/api.php 不再被框架自动识别,残留文件不会报错,但会变成“死代码”
- 路由绑定逻辑(如模型绑定、前缀、命名空间)全写在 withRouting() 闭包内,不再靠 RouteServiceProvider 推导
配置文件大幅精简,合并进 config/app.php 或环境变量
很多原本独立的配置文件在 Laravel 11 中被移除,相关设置要么并入 config/app.php,要么交由 .env 驱动:
- config/cors.php、config/broadcasting.php、config/cache.php、config/queue.php 等默认不再生成
- cors 设置现在通过 APP_CORS_ALLOW_ORIGIN 等环境变量控制;队列驱动直接读 QUEUE_CONNECTION
- config/app.php 中新增 'routing'、'middleware' 等顶层键,用于存放原属各配置文件的结构化选项
- 第三方包(如 sanctum、passport)的配置也倾向环境变量驱动,减少 config/ 下的碎片化文件











