Хорошо, когда я не использую ajax для отправки данных на сервер напрямую из формы, добавив скрытый параметр _method, где значение равно «PUT» -> все просто работает как чудо для обновления формы. Но когда я пытался сделать то же самое с ajax, получая null для объекта $ request в функции обновления контроллера. Прямо сейчас я чувствую испуг, что для удаления я должен использовать method = 'POST'.
Я использовал оба метода method = 'POST' или type = 'POST', но не повезло.
Route::resource('contents', 'ContentController');
let url_content_update = "{{ route('contents.update', ':id') }}";
WebApp.ContentController.onClickUpdateButton = function () {
var _id = $("#form_id").data('_id');
var form = $("#form_id")[0];
var formData = new FormData(form);
console.log(formData.get('title'));// console print "I am title" just fine.
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
url: url_content_update.replace(':id', _id),
method: 'PUT',
contentType:false ,
processData: false,
data: formData,
xhr: function() {
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener("progress", function(evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
$('#status').html('Upload a file (compulsory):<b> Uploading -> ' + (Math.round(percentComplete * 100)) + '% </b>');
}
}, false);
return xhr;
},
success: function (result) {
},
error: function (jqXHR, exception) {
}
})
}
Контроллер: получил значение $ id = 383 успешно. Но в объекте $ request найден ноль;
public function update(Request $request, $id)
{
$content = Content::find($id);
$content->app_id=$request->app_cat;
$content->cat_id=$request->category;
$content->sub_cat_id=$request->subcategory;
$content->title=$request->title;
$content->content_type=$request->type;
if($request->type==3||$request->type==4||$request->type==5){
//return json_encode($request->hasFile('any_file'));
if($request->hasFile('any_file')){
$content->content=$this->storeFile($request);
}
}else{
$content->content=$request->content;
}
$fileNameToStore='no_image.jpg';
if($request->hasFile('cover_image')){
$this->validate($request,[
'cover_image'=>'image|nullable|max:1999'
]);
$content->cover_image=$this->storeImage($request);
}
$content->save();
$output = array("message"=>"Content updated successfully", "status" => "200");
echo json_encode($output);
}