Laravel проверяет массив объектов выпуска - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть запрос, в котором я передаю массив объектов 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 части, она работает нормально, однако мне нужно контролировать то, что я получаю.

1 Ответ

0 голосов
/ 04 сентября 2018

У вас есть массив объектов, так как json_decode возвращает объект. Чтобы он мог вернуть ассоциативный массив, вам нужно сделать json_decode($item, true). Это необходимо сделать, потому что валидатору Laravel нужны как данные, так и правила валидации, чтобы быть массивами. Поскольку вы передавали массив объектов, он не работал.

...