Laravel升级后路由404主因是缓存未清或命名空间缺失:先执行route:clear和route:list --compact确认路由加载,检查routes/web.php是否被正确引入及语法错误,10+版本需用完整限定类名(FQCN)并确保RouteServiceProvider中namespace()存在,开发时务必重启artisan serve。

升级后路由 404,八成是缓存没清或命名空间断了——不是代码写错了,是框架默认行为变了。
route:list 看不见你的路由?先跑这三行
别急着改代码,先确认路由是否真被加载。Laravel 升级(尤其是 9→10、11→12)后,route:list 可能“假装看不见”你刚写的路由,原因通常是缓存残留或文件未被正确引入。
- 执行
php artisan route:clear—— 清掉旧路由缓存(哪怕你记得没手动 cache 过,升级过程可能自动触发过) - 再跑
php artisan route:list --compact,看输出里有没有目标路径(比如GET | /admin/dashboard) - 如果仍为空,检查
routes/web.php是否被RouteServiceProvider::mapWebRoutes()调用;Laravel 10+ 移除了默认$namespace,但不会跳过整个文件——更可能是该文件里有语法错误(比如漏了分号、括号不匹配),导致后续所有路由解析中断
“Class not found” 报错?Laravel 10+ 命名空间不再自动补全
升级到 Laravel 10 或更高版本后,Route::get('/admin', 'AdminController@index') 这种字符串写法会直接报 Class "AdminController" not found——因为框架不再隐式拼接 App\Http\Controllers\ 前缀。
- 必须改用完整限定类名(FQCN):
Route::get('/admin', [App\Http\Controllers\Admin\AdminController::class, 'index']) - 推荐在文件顶部
use类,再简写:use App\Http\Controllers\Admin\AdminController;→[AdminController::class, 'index'] - 别信 IDE 自动补全的字符串路径(如
'Admin\AdminController@index'),那只是历史遗留习惯,Laravel 10+ 不认
本地开发时还 404?重启 php artisan serve 是硬要求
php artisan serve 启动的开发服务器不会监听 PHP 文件变更,改完 routes/web.php 或控制器后,光清缓存不够,必须重启服务。
- 按
Ctrl+C终止当前进程 - 再执行
php artisan serve - 注意:如果你用的是 Valet、Docker 或 Nginx,问题可能出在重写规则(比如 Nginx 缺少
try_files $uri $uri/ /index.php?$query_string;),但纯artisan serve场景下,不重启 = 白清缓存
APP_ENV=local 却还走缓存?检查是否误启了 route:cache
开发环境本不该用路由缓存,但升级后若曾执行过 php artisan route:cache,即使现在 APP_ENV=local,Laravel 仍会优先读缓存文件(bootstrap/cache/routes-v7.php)。
- 删掉
bootstrap/cache/下所有文件(或只删routes-*.php) - 运行
php artisan optimize:clear(等价于清路由+配置+视图+普通缓存) - 确认
.env中APP_ENV=local且没有其他地方覆盖(比如服务器配置或config/app.php中硬编码)
最常被忽略的一点:升级后 RouteServiceProvider 的 mapWebRoutes() 方法里,namespace() 调用还在不在——有些升级脚本会把它删掉,而你没注意到。它不在,就等于整个 web.php 失去命名空间上下文,哪怕用了 FQCN,中间件组、模型绑定等依赖也可能悄悄失效。











