Как сохранить несколько входных данных и файлов, используя ajax и laravel 5.6 - PullRequest
0 голосов
/ 02 июня 2018

У меня около двадцати text-box, checkbox и select, а также четыре типа файлов.Я хотел бы сохранить входные данные в базе данных, используя Laravel и AJAX.

На самом деле, я могу сохранить все входные данные кроме типа файла (изображения).

Таблица: META | VALUE

Мой маршрут: $this::resource('/settings','SettingController')->only(['index', 'store']);

Контроллер:

$setting = $request->all();
foreach ($setting as $meta => $value) {
    $SF = new Setting();
    $SF->meta = $meta;
    $SF->value = $value;
    echo  $SF->save();
}

HTML:

<form>
 <input type="text" name="site_title"  id="site-title">
 <input type="checkbox" name="register"  id="register">
  ....
 <input type="file" name="logo"  id="logo">
 <input type="file" name="favicon"  id="favicon">
 <input type="file" name="user_profile"  id="user_profile">
 <input type="file" name="Personal"  id="Personal">

AJAX-код:

 $('#setting-forms').on('submit', function () {
    event.preventDefault();
    let _token =  $('input[name=_token]').val();  //Get Token
    let FormInputs = $("#setting-forms").serialize(); 

    $.ajax({
        method: 'POST',
        url: '/settings',
        data: FormInputs ,

        success: function (data) {
          //Some Success MSG

        },
        error: function () {
             //Some Error MSG
        },
    });

Теперь этот код сохраняет все входные данные, кроме типов файлови мой результат выглядит примерно так:

     META     |     VALUE
--------------+--------------
   site_title |   Laravel
    register  |     On
      ....    |     ...

Но я хочу сохранить и все файлы изображений, поэтому я изменил свой код AJAX на следующий:

 let formData = new FormData();
 let logo = $("#logo")[0].files[0];
 formData.append('logo', logo);
 formData.append('FormInputs', FormInputs);
 $.ajax({
        method: 'POST',
        url: '/settings',
        data: formData,
        contentType: false,
        processData: false,
        headers: {
            'X-CSRF-TOKEN': _token
        },

Теперь я могу сохранять логотипыно мой текст сохранен в одной строке.Я получаю это:

     META     |                Value
--------------+-----------------------------------
     Logo     |               MyLOGO
   FormInputs |  site_title=titlea&register=on&...

Хотя я бы хотел что-то вроде этого:

     META     |     VALUE
--------------+--------------
    Logo      |    MyLOGO
  site_title  |    title
   register   |     On

Как я могу это исправить?

1 Ответ

0 голосов
/ 06 июня 2018

Ну, через 3 дня наконец-то получите мой ответ.Итак, я поместил свой код здесь, если кто-то нуждался или у меня возникла проблема.

Выше кода - это работа, просто нужно внести некоторые изменения, и здесь изменения.

//let FormInputs = $("#setting-forms").serialize();  
  let FormInputs = $("#setting-forms").serializeArray();

 // formData.append('FormInputs', FormInputs);
 jQuery.each(FormInputs, function (i, field) {
        formData.append(field.name, field.value);
 });

Ну, теперь работают нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...