Я пытаюсь сохранить изображение и сохранить его местоположение в базе данных, но по какой-то причине я всегда получаю null, когда сбрасываю запрос с моего контроллера. Не уверен, что я делаю неправильно.
Моя форма:
<form class = "addorUpdateBlockItem" method = "post" enctype = "multipart/form-data">
<div class = "input-group item">
<label for = "content">label</label>
<input type = "text" hidden name = "item_type" value = "image">
<input type = "file" name = "content" id = "contentImageBlockId3" class = "form-control">
<span class = "input-group-btn">
<button type = "submit" class = "btn btn-default plus margin-top">opslaan</button>
</span>
</div>
</form>
Теперь в моем контроллере я пытаюсь получить доступ к изображению в своем запросе следующим образом:
dd($request->input('content'));
Это приводит к нулю
Мой метод контроллера, где я делаю дамп
/**
* Add or Update a BlockItemContent to a BlockNewsletter item.
*
* @param $blockNewsletterPivotId
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function addOrUpdateBlockItemContent($blockNewsletterPivotId, Request $request)
{
if ($request->input('item_type') == "image") {
dd($request->hasFile('content'));
}
}
это приводит к ложному
Я забыл, что все происходит через вызов ajax, возможно, это как-то связано с этим:
$(document).on('submit', '.addorUpdateBlockItem', function (e) {
e.preventDefault();
// Retrieve form data
let formData = new FormData();
let data = $(this).serializeArray();
$.each(data, function(index, field) {
formData.set(field.name, field.value);
});
$.ajax({
url: $(this).attr('action'),
data: formData,
processData: false,
contentType: false,
type: 'POST',
success: function(data){
if (data.data.actionType === 'update') {
$('.successMessage').html(data.data.item + ' succesvol bijgewerkt.');
}
if (data.data.actionType === 'insert') {
$('.successMessage').html(data.data.item + ' succesvol toegevoegd.');
}
$('.successMessage').show();
},
error: function(error) {
console.info(error);
}
});
});
он также возвращает ложь






Вы можете получить доступ к файлу с помощью $request->file('content').
Проверьте также $request->hasFile('content'), он должен вернуть вам true.
к сожалению, он возвращает false, что происходит не так?
есть ли у $_FILES данные вашего загруженного файла? Можете ли вы показать мне подпись вашего метода контроллера?
вы можете увидеть мой отредактированный OP, я забыл, что все происходит с вызовом ajax
Замените раздел formdata здесь:
let formData = new FormData();
let data = $(this).serializeArray();
$.each(data, function(index, field) {
formData.set(field.name, field.value);
});
С этим:
let formData = new FormData($(this)[0]);
но мне нужно использовать этот код formData, потому что это может быть просто поле ввода, а не изображение.
Насколько я знаю, этот код должен захватить их все?
вы правы, это работает с изображением и вводом текста, спасибо
вы сделали эту строку:
$.ajax({
url: $(this).attr('action'),..
но в вашей форме вы не указали никакого действия:
<form class = "addorUpdateBlockItem" method = "post" enctype = "multipart/form-data">
поэтому попробуйте сделать это и позвольте мне увидеть ваш результат dd:
<form class = "addorUpdateBlockItem" action = "{{ route('your_upload_route') }}" method = "post" enctype = "multipart/form-data">
удалите
if ($request->input('item_type') == "image")и посмотрите, возвращает ли dd значение true. Если да, то файл есть