3分钟短文 | Laravel 内3种数据校验的写法,你喜欢哪一个?

2020-08-13 14:52:31 浏览数 (1)

引言

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

0 人点赞