Laravel 验证对象数组问题

Laravel validate array of objects issue

我有一个请求,我在其中传递了一个 JSON 对象数组。它具有以下结构

[ {path: 'string', class: 'string'} ]

据我所知,没有简单的方法来检查这个数组,所以我接下来尝试了

$validatedData = $request->validated();

        $result = ['data' => []];
        foreach ($validatedData['items'] as $item) {
            $result['data'][] = json_decode($item);
        }

        Validator::make($result, [
            'data.*.path' => 'required|url',
            'data.*.class' => 'required|string'
        ])->validate();

然而它导致

array(1) {
  ["data"]=>
  array(2) {
    [0]=>
    object(stdClass)#813 (2) {
      ["link"]=>
      NULL
      ["class"]=>
      NULL
    }
    [1]=>
    object(stdClass)#814 (2) {
      ["link"]=>
      NULL
      ["class"]=>
      NULL
    }
  }
}

验证器以某种方式切断了数据。当我尝试不使用 Validator::make 部分时它工作正常,但是我需要控制我检索的内容。

您有一个对象数组,因为 json_decode return 是一个对象。要return一个关联数组,你需要做json_decode($item, true)。您需要这样做,因为 Laravel 验证器需要数据和验证规则都是数组。由于您传递的是对象数组,因此它不起作用。