改了 routes/web.php 仍 404 的最常见原因是开发环境路由缓存未清除或 php artisan serve 未重启,而非语法错误;必须执行 php artisan route:clear 并重启服务才能使新路由生效。

php artisan serve 能跑出欢迎页,不代表你的路由、控制器或数据库配置已经生效——绝大多数新手卡在“改了代码却没反应”这一步,核心问题不是不会写,而是不知道哪些操作必须清缓存、哪些路径必须显式注册、哪些错误其实是配置没重载。
为什么改了 routes/web.php 还是 404
最常见原因不是路由语法错,而是开发环境缓存没清或服务器没重启。
-
php artisan serve启动后,修改路由文件需手动刷新浏览器;但若之前执行过php artisan config:cache或php artisan route:cache,新路由根本不会被加载 - 确认你改的是
routes/web.php(处理 Web 请求),不是routes/api.php(只匹配带api/前缀的请求) - 匿名函数路由如
Route::get('/test', function () { return 'ok'; });必须放在web.php里,且不能有语法错误(比如漏掉分号、括号不匹配) - 如果用控制器方式,例如
Route::get('/user', [UserController::class, 'index']);,要确保UserController文件存在、命名空间正确、类名首字母大写,且index()方法有return语句
控制器生成了,访问却报 404 或 Class not found
Laravel 不自动扫描控制器,php artisan make:controller 只建文件,不注册路由,也不检查命名空间是否对齐。
- 控制器文件路径必须是
app/Http/Controllers/UserController.php,类声明必须为namespace App\Http\Controllers; - 若控制器在子目录下(如
Admin/UserController),路由中要写全限定类名:[App\Http\Controllers\Admin\UserController::class, 'index'] - 方法参数带变量时,路由占位符必须严格对应,例如
show($id)→ 路由必须写/user/{id},写成/user/{uid}就会 404 - 别在控制器里用
echo或dd()之外的调试输出——Laravel 响应依赖return,提前输出会触发 “headers already sent” 错误
.env 改了,但 php artisan migrate 仍连不上数据库
错误信息如 SQLSTATE[HY000] [1045] Access denied for user,90% 是配置未生效,不是 MySQL 没开。
-
DB_CONNECTION必须小写写成mysql,写成MySQL或pdo_mysql都无效 -
DB_PORT必须显式写出(如3306),不能留空或注释掉 - 改完
.env后,**必须执行php artisan config:clear** —— Laravel 开发阶段默认读缓存配置,不手动清就永远读不到新值 - 运行
php artisan migrate前,先确认database/migrations/下有迁移文件(如2014_10_12_000000_create_users_table.php),且其中up()方法调用了Schema::create()
Blade 视图渲染空白或报 View [xxx] not found
Blade 文件路径和命名必须与 view() 参数完全一致,且不能忽略扩展名和目录层级。
-
return view('welcome');对应resources/views/welcome.blade.php,不是welcome.php或resources/views/welcome/index.blade.php - 如果视图在子目录下,比如
resources/views/admin/dashboard.blade.php,调用时写view('admin.dashboard')(用点号代替斜杠) - Blade 中传参必须用
{{ $name }},不是<?php echo $name; ?>;逻辑判断用@if,不是<?php if(): ?> - 首次使用 Blade 时,
storage/framework/views/目录可能为空——这是正常的,Laravel 第一次访问时自动生成编译后文件,无需手动创建
真正卡住人的地方,从来不是“怎么写”,而是“什么时候要清缓存”“哪个路径必须手写注册”“哪个错误其实只是配置没重载”。这些细节不亲手试一遍,看再多文档也走不通一个请求。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











