新手用 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 约束APP_URL 和 Nginx/Apache 重写规则本地 php artisan serve 跑得好好的,部署到 Nginx 后点分页链接跳转成 /page/2 但返回 404——大概率是 URL 生成或服务器配置没对齐。
.env 中 APP_URL=http://your-blog.com(末尾不加斜杠);改完运行 php artisan config:clear
try_files $uri $uri/ /index.php?$query_string;,否则 /posts?page=2 这类带 query 的能过,但 /posts/page/2(用 ->withPath() 自定义路径时)会 404.htaccess 文件存在且 mod_rewrite 已启用真正卡住新手的,往往不是语法错误,而是这些“默认不报错但就是不动”的配置断层。Laravel 的优雅建立在约定之上,而博客这类 CRUD 密集型应用,最容易在中间件、模型保护、URL 构建这三个环节悄悄越界。