跳转到主要内容

什么是校验

校验(Validation)指的是验证用户提交的数据是否符合预期的格式与条件。 Laravel 通过请求对象的 validate 方法,以及专用的 Form Request 类,提供了简洁而强大的校验能力。

在控制器中做校验

$request->validate() 的用法

在控制器方法中调用 $request->validate() 是最直接的校验方式。 校验失败时,Laravel 会自动把用户重定向回前一页,并把错误信息存入 Session。 定义路由:
编写控制器:
validate 接收以字段名为键、规则为值的数组。 规则可以用 | 分隔或使用数组。

主要校验规则

完整规则请见官方文档

使用校验后的数据

validate 的返回值是只包含通过校验字段的数组,可作为可信数据使用。

Blade 中展示错误

校验失败时,Laravel 会让所有视图都能自动访问 $errors 变量。 这由 web 中间件组中的 ShareErrorsFromSession 中间件负责。

列出全部错误

按字段展示错误

使用 @error 指令可在字段旁行内显示错误:
使用 old('字段名') 可在校验失败后仍将用户输入的值填回表单。

Form Request

什么是 Form Request

当校验逻辑较复杂时,可将其抽离到「Form Request」类中。 Form Request 将校验与授权逻辑集中到一个自定义请求类中。

创建 Form Request

make:request Artisan 命令生成:
会生成 app/Http/Requests/StorePostRequest.php

rules() 方法

以数组形式返回校验规则,与直接传给 validate 的一致。

authorize() 方法

判断是否有权限执行该请求。 返回 true 通过,返回 false 时自动返回 403。 若只允许已认证用户,可用 auth()->check()。 教程中直接返回 true 即可。
authorize 返回 false 时,控制器方法不会执行,会直接返回 403 Forbidden。

注入到控制器

只需在控制器方法上做类型提示即可使用 Form Request。 控制器执行前会先运行校验,因此无需在方法内再写校验代码。
$request->validated() 只返回校验过的数据。

实践示例:创建并保存投稿表单

以下是从展示表单到提交、校验、保存的完整流程:
1

定义路由

2

生成 Form Request

3

实现控制器

4

创建 Blade 模板

Blade 表单请务必包含 @csrf 指令,否则 Laravel 会返回 419 错误。

下一步

HTTP 请求

回顾使用请求对象获取数据的方式。
最后修改于 2026年7月18日