Проблема с проверкой массива объектов Laravel

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

попробуй поставить $result = [];

Alexander Villalobos 03.09.2018 23:10

Почему бы вам не проверить ввод JSON? Я немного запутался в вашей проблеме и в том, почему вам нужно декодировать JSON и для начала создать массив результатов. Вы отправляете JSON в запросе, отличном от json?

Devon 03.09.2018 23:10

Я отправляю FormData с полем JSON.stringifyed. Это поле содержит массив. Поскольку это JSON, PHP рассматривает его как строку, поэтому я вынужден искать обходные пути

Sergey 03.09.2018 23:13

Какая-то конкретная причина? Почему бы просто не отправить json-запрос?

Devon 03.09.2018 23:14

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

José A. Zapata 03.09.2018 23:14

Потому что я нужно для отправки FormData. Он содержит файл.

Sergey 03.09.2018 23:14

@ JoséA.Zapata ну .. Это как-то сработало. Однако мне любопытно, почему он не работал с массивом объектов

Sergey 03.09.2018 23:17

Кажется разумным, поскольку объекты stdclass никогда не будут существовать в запросе.

Devon 03.09.2018 23:18

@ JoséA.Zapata, пожалуйста, опубликуйте свой ответ Я отмечу это. Если возможно, расширьте свое объяснение для тех, кто впервые столкнулся с той же проблемой.

Sergey 03.09.2018 23:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
987
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме