laravel validate这种如何写?

情况是这样的,前端传给我的字符串是多个id用逗号组合的,如
1,2,3 这些的
然后有用的id是一个数组如[1,2,3,4,5,6]
然后我想用validate

传入的id是1,2,3
$arr=[1,2,3,4,5,6];
$this->request->validate([
            'id'=>Rule::in($arr)
        ]);

然后我想验证多个id用逗号组合的每个id是否都在数组里面,如果都在那么就通过,如果有一个不在那么就失败,这应该如何写验证器?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 7

使用自定义验证规则 或者闭包函数 或者让前端传个数组给你用Rule::in 验证

9个月前 评论

直接这样:

'id'=>function(mixed $value):void {
  $ids = explode(',',$value); // 这个就是前端给你的
  foreach($ids as $id) {
     if (!in_array($id,$arr)) {
        abort(422,"必须包含xx")
    }
  }
}

关于参数,前后端最好是协商,数组就传数组,字符串就传字符串。不然到时候前端乱传一通对验证器就无用了。

9个月前 评论
唐章明

博客:Laravel Validator与FormRequest用法汇总

protected function prepareForValidation(): void
{
    $this->merge([
        /**
         * rules验证的是这里你修改过后的数据 且影响 $this->all() 与 $this->validated() 结果
         */
        'id' => explode($this->id, ',').
    ]);
}
9个月前 评论

参考楼上的,预先处理下数据。

9个月前 评论
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;

$input = [
    'airports' => ['NYC', 'LAS'],
];

Validator::make($input, [
    'airports' => [
        'required',
        'array',
    ],
    'airports.*' => Rule::in(['NYC', 'LIT']),
]);
9个月前 评论
hfxlyf 7个月前
Imuyu (作者) 7个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!