引言
web应用程序公开访问几乎没有不带用户交互的,难免要接收用户输入的奇奇怪怪的东西。对于后端程序,必须对输入的内容进行有效性过滤。
这就是本文的重点,说一说laravel中输入请求的校验。
学习时间
假设请求Request内有一个 names 字段,传送的是一个数组,对于数组,我们应该如何校验呢?其实需要两步,第一步校验names字段本身必须是数组,其次校验数组的元素规则。
用代码实现起来是这样的:
代码语言:javascript复制$validator = Validator::make($request->all(), [
"names" => "required|array|min:3",
"names.*" => "required|string|distinct|min:3",
]);
其中 Validator 是laravel门面内注册的校验类。在第一个规则下,验证了names字段必须为array类型,且长度至少为3。
接着使用星号匹配数组内元素,要求都是string字符串,且不得重复 distinct,且每个字符串长度最小为3。
laravel 5.5 以后的版本,你无需手动实例化 Validaor 对象,可以在 Request 对象直接调用 validate 方法实现。代码这样写:
代码语言:javascript复制$data = $request->validate([
"name" => "required|array|min:3",
"name.*" => "required|string|distinct|min:3",
]);
上面两种方式校验之后,都可以使用 $validator->fails() 方法判断是否通过,如果 true 就是有错误,可以获取 error message,并返回给前端;如果 false,就是校验通过了,继续下面的处理流程。
自定义验证
laravel内你也可以自定义验证规则,使用 artisan 命令新建一个验证类:
代码语言:javascript复制php artisan make:request SomeRequest