Laravel 6 Form Array $ request- ›input () не работает

У меня есть такой массив цен, например:

<input type="input" id="prices[type][1]" name="prices[type][1]">
<input type="input" id="prices[type][2]" name="prices[type][2]">

Я отправляю эти данные через почтовый запрос (JSON: Да, Content-Type установлен на application/json) и ожидал получить массив, когда использую $request->input('prices'), но на самом деле этого не происходит. Тоже пробовал $request->get('prices').

Когда я делаю $request->all(), я получаю все данные, которые я отправил:

дампы разных методов запроса

JS Используется для запроса:

const response = await fetch(this.action, {
  method: 'POST',
  credentials: 'same-origin',
  headers: {
    'Content-Type': 'application/json',
    'X-CSRF-TOKEN': this.$page.token,
  },
  body: this.formData(),
});

const body = await response.json();

this.formData():

formData(): Object {
  const formData = new FormData(this.$el);

  return JSON.stringify(Array.from(formData.entries()).reduce((memo, pair) => ({
    ...memo,
    [pair[0]]: pair[1],
  }), {}));
},

У кого-нибудь есть идеи, где это может пойти не так?


person Robin B    schedule 09.10.2019    source источник


Ответы (1)


Хм, похоже, что массив сломан, даже если вы сделаете all(), поскольку я не вижу ключа type в массиве.

Попробуйте вместо этого:

dd(json_decode($request->getContent(), true));

Поскольку это JSON, вам нужно будет получить тело и преобразовать его в массив.

person nakov    schedule 09.10.2019
comment
Ой, черт возьми, я вычеркнул шрифт, я понял. Но я уже пробовал json_decode, он дает тот же результат, что и $request->all() - person Robin B; 09.10.2019
comment
@RobinB на $request->getContent() или на $request->all()? - person nakov; 09.10.2019
comment
Также вы можете использовать JSON.stringify перед отправкой в ​​контроллер. Или, пожалуйста, поделитесь своим кодом AJAX, чтобы получить более качественную помощь. - person nakov; 09.10.2019
comment
На $request->getContent() я использую JSON.stringify() в JS, я обновлю свой ответ с помощью JS - person Robin B; 09.10.2019
comment
Хм, а вы можете проверить содержимое тела запроса во вкладке сети вашего браузера, как это выглядит? И проверьте некоторые онлайн-инструменты, если это действительный JSON? - person nakov; 09.10.2019
comment
Да, это действительный JSON - person Robin B; 09.10.2019
comment
Итак, ваша структура JSON неверна, мой друг. Он должен что-то делать с этой частью Array.from(formData.entries()).reduce((memo, pair) => ({ ...memo, [pair[0]]: pair[1], }), {}) - person nakov; 09.10.2019
comment
Оказалось, что это действительно так, вложенные значения не работали. Спасибо за быстрые ответы! - person Robin B; 10.10.2019
comment
@RobinB, вы можете выразить признательность, проголосовав за ответ или отметив ответ как решение, которое укрепит мою репутацию на SO :) Рад помочь. - person nakov; 10.10.2019
comment
Вот мое решение: stackoverflow.com/questions/2690654/ Я создал промежуточное ПО, которое преобразует типы данных в их правильные, а не в строковые. - person agm1984; 13.10.2020