新手用 Laravel 搭博客最常卡在路由未生效、模型关系查不到数据、表单提交 419 错误三类问题;根源是默认配置与直觉偏差:路由须置于 routes/web.php 或显式加 web 中间件,Post 模型需声明 $fillable,分页 404 需检查 APP_URL 和服务器重写规则。

新手用 Laravel 搭博客架构,最常卡在「路由没生效」「模型关系写对了但查不出数据」「表单提交后 419 错误」这三类问题上——不是 Laravel 太难,而是默认配置和直觉有偏差,得先绕开几个默认陷阱。
路由定义必须显式加 web 中间件组
Laravel 8+ 默认把 routes/web.php 自动套进 web 中间件组,但如果你手抖新建了 routes/blog.php 或直接在 routes/api.php 里写博客路由,就会发现:CSRF 验证失败、Session 读不到、重定向不带 Flash 数据。
- 所有面向浏览器的博客路由(如
/posts、/posts/create)必须放在routes/web.php,或手动用Route::middleware('web')包裹 -
api.php专供无状态接口,不带 session 和 CSRF,别混用 - 检查
app/Providers/RouteServiceProvider.php的mapWebRoutes()是否仍加载web.php
Post 模型要主动声明 $fillable 或用 create() 前校验
博客文章创建时用 Post::create($request->all()) 却报错 “Add [title] to fillable property”,是因为 Laravel 默认禁止批量赋值(mass assignment),防止字段被恶意注入。
- 在
app/Models/Post.php中明确列出可批量写入字段:protected $fillable = ['title', 'slug', 'content', 'published_at'];
- 不要用
$guarded = []开全库,尤其上线后有用户投稿功能时极危险 - 如果用
Post::firstOrCreate()或updateOrCreate(),同样受$fillable约束
分页链接 404?检查 APP_URL 和 Nginx/Apache 重写规则
本地 php artisan serve 跑得好好的,部署到 Nginx 后点分页链接跳转成 /page/2 但返回 404——大概率是 URL 生成或服务器配置没对齐。
- 确保
.env中APP_URL=http://your-blog.com(末尾不加斜杠);改完运行php artisan config:clear - Nginx 需包含 Laravel 推荐的
try_files $uri $uri/ /index.php?$query_string;,否则/posts?page=2这类带 query 的能过,但/posts/page/2(用->withPath()自定义路径时)会 404 - Apache 用户确认
.htaccess文件存在且mod_rewrite已启用
真正卡住新手的,往往不是语法错误,而是这些“默认不报错但就是不动”的配置断层。Laravel 的优雅建立在约定之上,而博客这类 CRUD 密集型应用,最容易在中间件、模型保护、URL 构建这三个环节悄悄越界。









