3分钟短文 | Laravel 表单验证数组的数据
引言
本文说一个小的知识点,在表单验证中,对数组数据进行验证, 我们需要进行两项,一项是数组本身的验证,一项是数组元素的验证。
学习时间
例如有一个POST请求过来的数据,由3个数组组成,name,amount,description。三个字段的验证需求如下:
- name字段,必填,每个元素唯一,且至少有3个元素
- amount字段,必填,元素要求都是整数,且最少有1个元素
- description字段,必填,元素可有可无,且元素都是字符串。
明确了需求,我们发现上述的验证,laravel内置的规则基本可以解决。只是对于字段是数组,且数组长度满足某些条件的要求,有些苛刻。具体如何实现呢?
laravel表单验证规则中,使用星号,可以匹配数组的元素。那么对于name字段,我们的验证规则是这样的:
$validator = Validator::make($request->all(), [
"name" => "required|array|min:3",
"name.*" => "required|string|distinct|min:3",
]);
第一步验证name必填,必须为数组,且至少有3个元素;第二步,使用星号匹配所有的数组元素, 必填,字符串类型,唯一性。
那么这样,其他两个字段也很好实现了:
"amount" => "required|array|min:1",
"amount.*" => "required|integer|min:1",
"description" => "required|array",
"description.*" => "required|string",
前后端分离
对于当下前后端分离的开发模式,前端使用VUE网络请求传递过来的数据,如何验证呢?其实,如果相似的接口,上一节的方式也完全可用。但我们讨论一种更复杂一些的情形,比如表单传递过来的是这样的数组:
[0] => Array
[item_id] => 1
[item_no] => 3123
[size] => 35
[1] => Array
[item_id] => 2
[item_no] => 7688