前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3分钟短文 | Laravel 表单验证数组的数据

3分钟短文 | Laravel 表单验证数组的数据

作者头像
程序员小助手
发布2020-09-01 11:41:30
3.5K0
发布2020-09-01 11:41:30
举报
文章被收录于专栏:程序员小助手

引言

本文说一个小的知识点,在表单验证中,对数组数据进行验证, 我们需要进行两项,一项是数组本身的验证,一项是数组元素的验证。

学习时间

例如有一个POST请求过来的数据,由3个数组组成,name,amount,description。三个字段的验证需求如下:

  • name字段,必填,每个元素唯一,且至少有3个元素
  • amount字段,必填,元素要求都是整数,且最少有1个元素
  • description字段,必填,元素可有可无,且元素都是字符串。

明确了需求,我们发现上述的验证,laravel内置的规则基本可以解决。只是对于字段是数组,且数组长度满足某些条件的要求,有些苛刻。具体如何实现呢?

laravel表单验证规则中,使用星号,可以匹配数组的元素。那么对于name字段,我们的验证规则是这样的:

代码语言:javascript
复制
$validator = Validator::make($request->all(), [
    "name"    => "required|array|min:3",
    "name.*"  => "required|string|distinct|min:3",
]);

第一步验证name必填,必须为数组,且至少有3个元素;第二步,使用星号匹配所有的数组元素, 必填,字符串类型,唯一性。

那么这样,其他两个字段也很好实现了:

代码语言:javascript
复制
"amount"    => "required|array|min:1",
"amount.*"  => "required|integer|min:1",

"description"    => "required|array",
"description.*"  => "required|string",

前后端分离

对于当下前后端分离的开发模式,前端使用VUE网络请求传递过来的数据,如何验证呢?其实,如果相似的接口,上一节的方式也完全可用。但我们讨论一种更复杂一些的情形,比如表单传递过来的是这样的数组:

代码语言:javascript
复制
[0] => Array
    (
        [item_id] => 1
        [item_no] => 3123
        [size] => 35
    )
[1] => Array
    (
        [item_id] => 2
        [item_no] => 7688
        [size] => 56
    )

这是一个二维数组,二维数组内元素都是相同的键值对。那么在laravel的验证器中,应该如何写呢?

这与指定了字段名的数组不同,这个数组的键是自动编排的数字,所以,我们需要通配键名。验证起来应该这样的:

代码语言:javascript
复制
$this->validate($request, [
    '*.item_id' => 'required|integer',
    '*.item_no' => 'required|integer',
    '*.size'    => 'required|max:191',
]);

这样就是针对所有数组内指定的键的数据进行验证了。

写在最后

本文介绍了两种表单格式的数据的验证,一种是指定字段名的一维数组,一种是二维关联数组的验证, 如果有条件的大家可以看一下框架在这种处理验证规则的处理逻辑代码。

Happy coding :-)

我是@程序员小助手,持续分享编程知识,欢迎关注。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小助手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 学习时间
  • 前后端分离
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档