Невозможно прочитать multipart/form-data из запроса в Laravel

Я пытаюсь отправить форму с файлом загрузки и кодировкой multipart/form-data с использованием AJAX. Я использую эту форму:

{!! Form::model($user, ['method' => 'PATCH', 'url' => ['/administrator/users', $user->id], 'class' => 'form-horizontal', 'files' => 'true', 'id' => 'userEdit']) !!}
    <div class="modal-body">
        <div class="form-group">
            <label class="col-sm-3 control-label">Avatar:</label>
            <div class="col-sm-9">
                <img src="/dashboard/assets/img/avatar/{{ $user->profile->avatar }}" class="img-circle m-b" />
                <input type="file" name="avatar" />
            </div>
        </div>
        <hr />
        <div class="form-group">
            <label class="col-sm-3 control-label">Name:</label>
            <div class="col-sm-9">
                <input type="text" name="first_name" value="{{ $user->profile->first_name }}" class="form-control" />
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-3 control-label">Surname:</label>
            <div class="col-sm-9">
                <input type="text" name="last_name" value="{{ $user->profile->last_name }}" class="form-control" />
            </div>
        </div>
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="submit" class="btn btn-info" data-user-id="{{$user->id}}">Save</button>
    </div>
{!! Form::close() !!}

Я пытаюсь отправить данные с помощью Ajax следующим образом:

$('#editUser').submit('#userEdit', function(event) {
            event.preventDefault();
            $.ajax({
                type: 'PATCH',
                url: '/administrator/users/1',
                data: new FormData(userEdit),
                processData: false,
                contentType: false,
                mimeType: "multipart/form-data",
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                },
                success: function(data) {
                    alert(data);
                },
                error:  function(xhr, str){
                    alert(str);
                }
            });
        });

И в результате я не могу прочитать входные данные из запроса в контроллере. Он возвращает пустой массив.

    public function update($id, Request $request){
        dd($request->all());
    }

Я думаю, что я делаю что-то не так с отправкой составных данных. Как правильно отправить?


person Phargelm    schedule 17.11.2016    source источник
comment
Попробуйте инвертировать порядок параметров. обновление (запрос $ запрос, $ id)   -  person Umbert P.    schedule 17.11.2016
comment
@УмбертП. К сожалению, не работает :(   -  person Phargelm    schedule 17.11.2016


Ответы (1)


Кажется, что вы не добавляете FormData должным образом, и ваше событие кажется сломанным, вы должны добавить данные в ajax следующим образом:

$('#editUser').on('submit', function(event) {
    event.preventDefault();

    var form = $(this); // You need to use standard JS object here
    var formData = new FormData(form);

    $.ajax({
        type: 'PATCH',
        url: '/administrator/users/1',
        data: formData,
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        success: function(data) {
            alert(data);
        },
        error:  function(xhr, str){
            alert(str);
        }
    });
});

Надеюсь это поможет!

person Saumya Rastogi    schedule 17.11.2016