Я использую Kartik-v/file-input или известный как Boostrap File Input и хочу удалить загруженные изображения.
Из документы я предоставил URL-адреса для удаления изображений, хранящихся на сервере. Какие эти URL-адреса удаления являются API и принимают запрос DELETE. Однако url отправляет запрос POST, после чего мой Laravel выдает исключение, в котором говорится:
The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE..
Как я могу обойти это? Как я могу заставить url: отправлять запрос DELETE вместо POST?
$('.uploaded-images').fileinput({
browseLabel: 'Browse',
browseIcon: '<i class = "icon-file-plus mr-2"></i>',
uploadIcon: '<i class = "icon-file-upload2 mr-2"></i>',
initialPreview: [
'image/an-example-image.png',
'image/an-example-image2.png',
],
initialPreviewConfig: [
{caption: 'Jane.jpg', key: 1, url: 'http://web.com/api/medias/14', showDrag: false},
{caption: 'Anna.jpg', key: 2, url: '{$url}', showDrag: false}
],
initialPreviewAsData: true,
overwriteInitial: false,
maxFileSize: 1000,
});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте включить скрытое поле ввода ниже в свою форму и отправить запрос, в то время как тип отправки вашей формы СООБЩЕНИЕ
<input type = "hidden" name = "_method" value = "delete" />
Это не работает, когда изображение удаляется, это запрос, отправленный через Ajax.
У вас все еще возникает та же ошибка при отправке данных формы с этим скрытым полем ввода?
Да, та же ошибка. Я использую этот плагин kartik-v/file-input, и он предоставляет кнопку удаления, которая, если вы нажмете на нее, будет использовать значение url с запросом POST, в то время как мой API принимает запрос DELETE.
Можете ли вы предоставить фрагмент заголовков вашего запроса Ajax? Я хочу посмотреть, как данные вашей формы отправляются по запросу.
The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE.
Laravel нуждается в дополнительной информации, добавленной в их формы, чтобы правильно отправлять запросы DELETE.
Если вы используете шаблоны Blade, это будет выглядеть примерно так:
{{ Form::open(['url' => 'foo/bar', 'method' => 'delete', 'class' => 'deleteForm']) }}
<input type = "submit" class = "deleteBtn" />
{{ Form::close() }}
Если вы не используете шаблоны Blade, добавьте один из следующих элементов сразу после объявления формы (в HTML):
{{ Form::hidden('_method', 'DELETE') }}
или
{{ method_field('DELETE') }}
Вы можете больше узнать о запросах DELETE в laravel здесь и здесь.
Я также видел ваш комментарий, в котором упоминалось, что:
I'm using that kartik-v/file-input plugin and it provide delete button
Я никогда раньше не пользовался этим плагином; но, может быть, вы можете отредактировать/изменить кнопку, чтобы правильно отправить запрос DELETE, инкапсулировав кнопку в форму?
Например:
<form method = "POST" action = "/admin/users/{{$user->id}}">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<-- Your Delete Button/Input field Here -->
</form>
«может быть, вы можете отредактировать / изменить кнопку, чтобы правильно отправить запрос DELETE, инкапсулировав кнопку в форму?» - этот я не знаю, как это сделать
@PramanaAdiPutra Привет, я отредактировал свой ответ с примером, чтобы ответить на ваш вопрос.
Судя по источник библиотеки и ее документы. Вы можете указать метод запроса как параметр jquery ajax для его параметра: ajaxDeleteSettings. Пример
$('.uploaded-images').fileinput({
browseLabel: 'Browse',
browseIcon: '<i class = "icon-file-plus mr-2"></i>',
uploadIcon: '<i class = "icon-file-upload2 mr-2"></i>',
initialPreview: [
'image/an-example-image.png',
'image/an-example-image2.png',
],
initialPreviewConfig: [
{caption: 'Jane.jpg', key: 1, url: 'http://web.com/api/medias/14', showDrag: false},
{caption: 'Anna.jpg', key: 2, url: '{$url}', showDrag: false}
],
initialPreviewAsData: true,
overwriteInitial: false,
maxFileSize: 1000,
ajaxDeleteSettings: {
type: 'DELETE' // This should override the ajax as $.ajax({ type: 'DELETE' })
}
});
Вы также можете определить параметр глобально где-то перед определением вышеприведенного фрагмента.
$.fn.fileinput.defaults.ajaxDeleteSettings = {
type: 'DELETE'
};
Спасибо @ Chay22, я не знал, что могу переопределить метод удаления этого плагина.
имена методов чувствительны к регистру, поэтому
Route::get('/foo', 'FooController@method')->name('foo.method');, ноRoute::**GET**('/foo', 'FooController@method')->name('foo.method');не будет работать