什么是校验
校验(Validation)指的是验证用户提交的数据是否符合预期的格式与条件。 Laravel 通过请求对象的validate 方法,以及专用的 Form Request 类,提供了简洁而强大的校验能力。
在控制器中做校验
$request->validate() 的用法
在控制器方法中调用 $request->validate() 是最直接的校验方式。
校验失败时,Laravel 会自动把用户重定向回前一页,并把错误信息存入 Session。
定义路由:
validate 接收以字段名为键、规则为值的数组。
规则可以用 | 分隔或使用数组。
主要校验规则
完整规则请见官方文档。
使用校验后的数据
validate 的返回值是只包含通过校验字段的数组,可作为可信数据使用。
Blade 中展示错误
校验失败时,Laravel 会让所有视图都能自动访问$errors 变量。
这由 web 中间件组中的 ShareErrorsFromSession 中间件负责。
列出全部错误
按字段展示错误
使用@error 指令可在字段旁行内显示错误:
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 即可。
注入到控制器
只需在控制器方法上做类型提示即可使用 Form Request。 控制器执行前会先运行校验,因此无需在方法内再写校验代码。$request->validated() 只返回校验过的数据。
实践示例:创建并保存投稿表单
以下是从展示表单到提交、校验、保存的完整流程:1
定义路由
2
生成 Form Request
3
实现控制器
4
创建 Blade 模板
Blade 表单请务必包含
@csrf 指令,否则 Laravel 会返回 419 错误。下一步
HTTP 请求
回顾使用请求对象获取数据的方式。