2016-11-17 2 views
0

AJAXを使用してアップロードファイルとmultipart/form-dataエンコーディングでフォームを送信しようとしています。私は、このフォームを使用しています:Laravelでリクエストからmultipart/form-dataを読み取ることができません

{!! 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()); 
    } 

私はマルチパートデータの送信に間違っていると思います。正しく送信するには?

+0

パラメータの順序を逆にしてみてください。更新(Request $ request、$ id) –

+0

@UmbertP。残念ながら、それは動作していない:( – Phargelm

答えて

0

あなたが適切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); 
     } 
    }); 
}); 

・ホープ、このことができます!

関連する問題