【问题标题】:Problems with Laravel data validationLaravel 数据验证的问题
【发布时间】:2021-11-19 10:39:50
【问题描述】:

我的 api 验证存在一些问题。

我需要像这样发送一个 json 数组:

[
    {
        "acktime": "2021-09-25 08:45:07",
        "temp": 15.6
    },
    {
        "acktime": "2021-09-25 08:45:07",
        "temp": 15.6
    }
probably more array....
]

我想逐个验证数组并仅存储无效数据的有效数据返回错误,我尝试了一个 foreach cylce,但它将数组转换为对象,但 validate::make 只需要数组。

我试过这个:

 $validator = Validator::make($request->all(), [
        '*.acktime' => 'required',
        '*.temp' => 'required|numeric'
        ]);

    $validatedData = $validator->validated();
    var_dump($validatedData);
    return response()->json($validatedData);

但是如果我发送错误的数据,我只会得到错误而没有有效的数据,所以我尝试了这种方式:

foreach($datas as $data){
    $arr = (array)$data;
    $validator = Validator::make($arr, [
        'acktime' => 'required',
        'temp' => 'required|numeric'
        ]);
    if ($validator->fails()) {
        continue;
    } else {
        $newrawData = new rawData([
            'acktime' => $data->acktime,
            'temp' => $data->temp,
            'synctime' => now()
        ]);
        $newrawData->save();
        }
    }
    return response('OK', 200); //or error if some data are not ok
}

以这种方式工作,机器人我不知道 get,一个可能的验证错误..(目前有一个 continue 用于继续循环)有什么建议吗?

【问题讨论】:

    标签: laravel laravel-8 laravel-validation


    【解决方案1】:

    有两种方法可以进行这种验证:

    1. 从下面在 laravel 验证中创建一个自定义规则并将您的验证代码放入其中,这将起作用:

    https://laravel.com/docs/8.x/validation#custom-validation-rules

    1. 更简单的方法:

      $data = [ 'data' => $requests->all() ]; 
      
      $validator = Validator::make($data, [
          'data.*.name' => 'required|string',
          'data.*.' => 'required|string'
       ]);
      

    【讨论】:

    • 我认为第一个是最正确的,但我不知道收集错误,我试图创建一个 $err 数组但使用 $err.push(£errorcomingfromvalidator) 函数导致错误
    猜你喜欢
    • 2019-02-07
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2014-10-26
    • 2015-06-22
    • 2016-07-01
    • 2018-04-01
    相关资源
    最近更新 更多