如何使用Laravel验证器校验API请求参数?
- 内容介绍
- 文章标签
- 相关推荐
本文共计878个文字,预计阅读时间需要4分钟。
很多人把验证逻辑写进+FormRequest+,但改着改着把+rules()+写成了+return [];+,或者条件不匹配导致返回空数组,结果请求请求完成不校验就进去了控制器——导致+422+。都不会触发异常。
- 务必确保
rules()至少返回一个非空数组,哪怕只是['id' => 'required|integer'] - 如果想动态开关校验,用
withValidator()做拦截,而不是清空rules() - 测试时手动发个缺失必填字段的请求,看是否真返回
422和错误信息,别只看代码有没有写validate
Laravel 10+ 的 validated() 和 safe()->all() 行为不同
validated() 返回的是经过规则过滤后的数据(比如你写了 'email' => 'required|email',它只返回 email 字段),而 safe()->all() 是把所有通过校验的字段全吐出来,包括没在 rules() 里声明的字段(只要没被 only() 限制)。
本文共计878个文字,预计阅读时间需要4分钟。
很多人把验证逻辑写进+FormRequest+,但改着改着把+rules()+写成了+return [];+,或者条件不匹配导致返回空数组,结果请求请求完成不校验就进去了控制器——导致+422+。都不会触发异常。
- 务必确保
rules()至少返回一个非空数组,哪怕只是['id' => 'required|integer'] - 如果想动态开关校验,用
withValidator()做拦截,而不是清空rules() - 测试时手动发个缺失必填字段的请求,看是否真返回
422和错误信息,别只看代码有没有写validate
Laravel 10+ 的 validated() 和 safe()->all() 行为不同
validated() 返回的是经过规则过滤后的数据(比如你写了 'email' => 'required|email',它只返回 email 字段),而 safe()->all() 是把所有通过校验的字段全吐出来,包括没在 rules() 里声明的字段(只要没被 only() 限制)。

