laravel 11核心是“减包袱、显式化”:合并routes.php、移除app/http/kernel.php和app/providers目录,中间件与路由统一收口至bootstrap/app.php,迁移默认添加default(now())但需注意数据库兼容性。

Laravel 11 不是“功能堆砌”,而是把默认结构砍掉一大半,你得先接受它不给你铺路——routes/web.php 和 routes/api.php 合并成 routes.php,app/Http/Kernel.php 没了,app/Providers 目录也不见了,连 config/session.php 这类文件都得手动加回来。升级或新建项目前,必须按新约定重写入口逻辑。
bootstrap/app.php 成了唯一中枢:中间件、路由、异常全在这儿注册
以前分散在 app/Http/Kernel.php、RouteServiceProvider、AppServiceProvider 的逻辑,现在统一收口到 bootstrap/app.php。这不是“更简单”,而是“更显式”——你一眼就能看到整个应用的启动链路,但也意味着任何顺序错乱或漏配都会立刻报错。
-
->withMiddleware()必须显式声明web、api等中间件组,否则路由里引用会报错Middleware group [api] does not exist -
->withRouting()默认只加载routes.php;若仍需分文件(比如保留routes/api.php),得手动require并用Route::middleware('api')->group(...)包裹 -
->withExceptions()和->withProviders()都不能漏,否则自定义异常处理器(如App\Exceptions\Handler)或服务提供者(如AppServiceProvider)不会生效 - 中间件注册支持
append和prepend参数:$middleware->web(append: [EnsureEmailIsVerified::class])
迁移文件默认加 default(now()),但 MySQL 5.6 会直接报错
新生成的迁移默认给 created_at 和 updated_at 加了 ->default(now()),看起来很贴心,但实际有坑:
PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。
- MySQL 5.6 及以下版本不支持函数作为列默认值,会直接报错
Invalid default value for 'created_at' - PostgreSQL 需要写成
->useCurrent()或->default(DB::raw('CURRENT_TIMESTAMP')),now()在某些驱动下会被转成字符串字面量 - 这个默认值只对后续
INSERT生效,不会补全历史数据;想更新存量行,还得手写DB::table()->update(['created_at' => now()]) - SQLite 用户基本无感,因为 Laravel 11 默认启用 SQLite,且其对
now()支持良好
php artisan install 是模块化安装入口,但不解决兼容性问题
这个新命令用来快速安装常见功能包,比如 php artisan install inertia --vue,但它不是万能钥匙:
- 它不会检查第三方包是否兼容,比如
laravel/sanctum必须手动升级到^4.0,否则composer update会卡住 - 它不处理已有配置冲突:比如你项目里已用
passport,再跑install api(即 Sanctum)可能引发中间件或认证逻辑冲突 -
install dev会装 Ignition,但如果你已用flare或sentry,得自己删掉重复的异常上报逻辑 - 所有安装动作都基于当前
composer.json锁定版本,如果本地 PHP 版本低于 8.2,命令会直接失败,不提示降级方案
路由合并后 Route::apiResource() 仍可用,但中间件不再自动挂载
旧项目习惯用 Route::prefix('api') 自动注入中间件,Laravel 11 强制显式绑定:
-
Route::apiResource('posts', PostController::class)本身不带任何中间件,必须手动补上->middleware('api') - Web 路由默认走
web中间件栈,但如果你在routes.php里写了Route::get('/')却没包裹在Route::middleware('web')->group()中,Session、CSRF 等功能会失效 - API 路由若依赖
throttle:api,得确认该限流中间件已在withMiddleware()中注册,且名称匹配 - 别指望
Route::fallback()自动适配新结构——它仍存在,但必须放在所有路由定义之后,否则会拦截健康检查/up
最易被忽略的是:所有变更都围绕“显式优于隐式”展开,框架不再替你猜意图。哪怕只是加一个自定义中间件,也得亲手写进 bootstrap/app.php,而不是靠目录约定自动加载。这种设计让调试路径变短,但第一次适配时,每个漏掉的 withXXX() 调用都会变成 500 错误。










