本 FAQ 面向新项目(Laravel 11 及以上)。既有项目的升级步骤请参考迁移指南。
config 文件变少了
config 文件变少了
新结构从项目中删除了变更频率较低的 config 文件,这些文件转而使用框架内的
config/。项目侧的 config/ 与框架侧的 config/ 会进行合并,以项目侧为优先。只有在需要自定义时才创建对应文件,即可生效。没有 app/Http/Middleware 无法修改中间件配置 / 没有 app/Http/Kernel.php
没有 app/Http/Middleware 无法修改中间件配置 / 没有 app/Http/Kernel.php
新结构中 自定义中间件文件本身仍然创建在
app/Http/Kernel.php 已被废弃,中间件配置改在 bootstrap/app.php 的 withMiddleware() 中进行。app/Http/Middleware/ 目录中。Controller 中无法使用 $this->middleware()
Controller 中无法使用 $this->middleware()
$this->middleware() 是 Illuminate\Routing\Controller 的功能,新结构的空基类 Controller 中不可用。请改为实现 HasMiddleware 接口并定义 middleware() 方法。#[Middleware] 属性。没有 app/Console/Kernel.php,无法配置 Schedule
没有 app/Console/Kernel.php,无法配置 Schedule
新结构中 在
app/Console/Kernel.php 已被废弃,Schedule 的配置位置也发生了变化。在 routes/console.php 中定义(推荐):bootstrap/app.php 中定义:不知道如何注册事件和监听器
不知道如何注册事件和监听器
新结构废弃了 如果需要手动注册,可以在
EventServiceProvider,事件与监听器的手动注册不再必需。自动注册的机制: 只要监听器类的 handle() 方法参数上以类型声明指定了事件类,即可自动注册。AppServiceProvider::boot() 中处理。不知道如何向 config/app.php 添加 ServiceProvider
不知道如何向 config/app.php 添加 ServiceProvider
新结构中,ServiceProvider 的清单管理从 使用
config/app.php 迁移到了 bootstrap/providers.php。artisan make:provider 创建的 Provider 会自动追加到此文件中。没有 app/Exceptions/Handler.php
没有 app/Exceptions/Handler.php
新结构中
app/Exceptions/Handler.php 已被废弃,异常处理的配置改在 bootstrap/app.php 的 withExceptions() 中进行。想要自定义路由
想要自定义路由
路由的自定义在 完全接管(与 Laravel 10 的
bootstrap/app.php 的 withRouting() 中进行。添加路由文件:RouteServiceProvider 相同):指定 using 后,Laravel 默认的路由注册将完全被禁用,你可以自行控制所有路由。想要替换 Laravel 默认的 ServiceProvider
想要替换 Laravel 默认的 ServiceProvider
向 通过
config/app.php 添加 providers 键后,会与框架内的 config/app.php 合并生效。replace() 方法可以将默认 Provider 替换为自定义实现。没有 routes/api.php
没有 routes/api.php
从 Laravel 11 起,API 功能默认不再包含,如需使用可单独安装。该命令会创建/配置以下内容:
routes/api.php- 用于 API 认证的 Laravel Sanctum 配置
- 将 API 路由注册到
bootstrap/app.php
没有 routes/channels.php
没有 routes/channels.php
从 Laravel 11 起,广播功能默认也不再包含,如需使用可单独安装。该命令会创建/配置以下内容:
routes/channels.php- Laravel Reverb 的安装配置
- 广播的配置文件
想要判断中途加入的项目使用新结构还是旧结构
想要判断中途加入的项目使用新结构还是旧结构
请查看 仍以 Laravel 10 之前的旧结构升级的项目:形如
bootstrap/app.php 的内容。Laravel 11 之后的新结构(或已迁移):return Application::configure(... 就是新结构,否则就是仍以旧结构升级的项目。将旧结构项目迁移到新结构的步骤请参考迁移指南。相关页面
Laravel 11 之后的应用结构
详细讲解新应用结构的全貌以及
ApplicationBuilder 的内部实现。旧结构到新结构的迁移指南
讲解从 Laravel 10 的旧应用结构迁移到 Laravel 11 之后新结构的步骤。