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是否都在数组里面,如果都在那么就通过,如果有一个不在那么就失败,这应该如何写验证器?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

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

7个月前 评论

直接这样:

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

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

7个月前 评论
唐章明

博客:Laravel Validator与FormRequest用法汇总

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

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

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

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

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

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