Невозможно получить доступ к данным десериализованной json - PullRequest
0 голосов
/ 09 февраля 2020

Я использую ajax для отправки данных на мой контроллер, вот как я это делаю

var formData = JSON.stringify( $('#SubmitForm').serializeArray() );
$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});
$.ajax({
  type: 'POST',
  data: {formData},
  url: '{{route("fileController.sendFiles")}}',
  success: function(response) {
    console.log(response);
  },
  error: function(response){
    console.log(response);
  }
});

Вот маршрут

Route::post('/sendFiles', ['uses' => 'FileController@sendFiles'])->name('fileController.sendFiles');

И контроллер

public function sendFiles(Request $request)
{
  //$data = json_decode($request->input('formData'), true);
  //return $request->input('allFiles');
  $data = json_decode($request->input('formData'), true);
  return $data['allFiles'];
}

Однако я получаю эту ошибку

"message": "Undefined index: allFiles"

Когда я проверяю содержимое $ request, я вижу, что массив allFiles явно присутствует, но как мне получить к нему доступ? PS Я пытался изменить второй параметр при декодировании на false, разницы нет.

$ массив данных запроса

1 Ответ

0 голосов
/ 09 февраля 2020
  • Прежде всего ваши данные запроса - это простой массив объектов. Поэтому вы не можете индексировать его с помощью «allFiles».
  • Во-вторых, поскольку у нас есть несколько объектов с атрибутом name = «allFiles []», вы можете отфильтровать эти объекты и вернуть их значения. (я не знаю, как вы собираетесь его использовать, но так выглядит код)
public function sendFiles(Request $request)
{
  //$data = json_decode($request->input('formData'), true);
  //return $request->input('allFiles');
  $data = json_decode($request->input('formData'), true);
  //filter all allFiles object
  $allFiles = array_filter($data, function($obj){ 
             if(isset($obj->name)){
                return $obj->name=="allFiles[]";
             }
             return false;
           });
  //get values for all the filtered objects
  $allFilesValues = array_map(function($obj){ return $obj->value; }, $allFiles);
  return $data['allFiles'];
}

Дайте мне знать, если это работает для вас.

...