laravel 11 路由系统全显式:必须手动创建 routes.php 并在 bootstrap/app.php 中通过 ->withrouting(routes: __dir__.'/../routes.php') 显式指定;子路由文件(如 web.php、api.php)需在 routes.php 中手动 require,且各自必须用 route::middleware('web')->group(...) 等显式包裹;中间件组也须在 ->withmiddleware() 中声明,否则静默失效或报错。

Laravel 11 没有 routes/web.php,也不再自动加载它——你必须手动创建并显式引入一个统一的路由入口文件,比如 routes.php,否则所有路由都不生效。
routes.php 是唯一默认路由入口,不是可选替代
Laravel 11 彻底移除了对 routes/web.php 和 routes/api.php 的自动识别。框架只认一个文件:routes.php(路径为项目根目录下的 routes.php,不是 routes/web.php)。这个文件必须存在,且需在 bootstrap/app.php 中通过 ->withRouting() 显式指向它。
-
->withRouting(routes: __DIR__.'/../routes.php')是必需配置,漏掉就整个路由系统不启动 - 如果你坚持用
routes/web.php,它不会被自动加载,也不会报错——只是静默失效 - 旧项目升级时,
routes/web.php文件可以删掉,或重命名为web.php留作后续手动require
想按功能拆分路由?得自己 require,不能靠自动发现
要保留类似旧版的 web.php、api.php、admin.php 结构,你得在 routes.php 里手动 require 它们,并确保每组路由都显式绑定中间件——Laravel 不再帮你推断。
- 在
routes.php中写:require __DIR__.'/web.php';和require __DIR__.'/api.php'; -
web.php内部不能只写Route::get('/'),必须包裹在Route::middleware('web')->group(...)中 -
api.php同理:必须用Route::middleware('api')->group(...),否则/api/users会 404 或跳登录页 - 自定义
admin.php也一样:先require,再在文件内用Route::middleware('web')->group(...)包裹,别指望命名空间或前缀自动生效
中间件组必须在 bootstrap/app.php 显式注册
即使你写了 Route::middleware('api')->group(...),如果没在 bootstrap/app.php 的 ->withMiddleware() 里声明 $middleware->api(),就会立刻报错:Middleware group [api] does not exist。
-
app/Http/Kernel.php已被完全删除,所有中间件组定义现在只存在于bootstrap/app.php - web 组默认存在,但 api、auth、admin 等自定义组必须手写声明:
$middleware->api(append: [EnsureEmailIsVerified::class]) - 顺序影响执行:比如日志中间件放
prepend,权限校验放中间,响应处理放append - 自定义中间件类名必须带完整命名空间,且确保已加载(
composer dump-autoload后验证)
最常被忽略的一点:Laravel 11 的路由系统是「全显式」的——没有默认、没有约定、没有后备逻辑。少写一行 require,少声明一个中间件组,或者漏掉 ->withRouting() 的路径参数,结果不是报错,而是请求静默失败或跳转到错误页面。动手前,先确认这三处是否全部到位:routes.php 存在、bootstrap/app.php 中 withRouting 和 withMiddleware 配置完整、各子路由文件内都用了 Route::middleware(...)->group(...)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











