Маршрут ресурса Laravel удалить из axios
Я хотел бы настроить axios для удаления записи с помощью маршрута ресурсов:
axios.delete('/job-management', this.deletedata).then((res)=>{
console.log(res);
})
Для моих маршрутов у меня есть:
Route::resource('job-management', "PositionsController", [ 'as' => 'jobs']);
Теперь в моем PositionsController
у меня есть:
public function destroy(Positions $positions) {
return $positions;
}
Но выше всегда возвращается "метод не разрешен". Как я могу обработать запрос на удаление с помощью метода axios delete()
?
2 ответа:
Laravel бросает
MethodNotAllowedHttpException
, Когда мы пытаемся отправить запрос на маршрут, используя глагол HTTP, который маршрут не поддерживает. В случае этого вопроса мы видим эту ошибку, потому что код JavaScript отправляет запросDELETE на URL-адрес с путем/job‑management
, который обрабатывается маршрутом, который поддерживает только запросыGET иPOST . Нам нужно изменить URL на обычный формат, который ожидает Laravel для ресурсных контроллеров.Ошибка заключается в том, что сбивает с толку, потому что скрывает тот факт, что мы посылаем запрос на неправильный URL. Чтобы понять почему, давайте взглянем на маршруты, созданные
Route::resource()
(из документации ):Как показано выше, URL-адреса с компонентом путиVerb URI Action Route Name GET /job-management index job-management.index GET /job-management/create create job-management.create POST /job-management store job-management.store GET /job-management/{position} show job-management.show GET /job-management/{position}/edit edit job-management.edit PUT/PATCH /job-management/{position} update job-management.update DELETE /job-management/{position} destroy job-management.destroy
/job-management
передаются в методыindex()
иstore()
контроллера, которые не обрабатывают запросы DELETE. Вот почему мы видим исключение.Чтобы выполнить запрос DELETE , как показано в вопросе, нам нужно отправить запрос на URL-адрес с таким путем, как
/job-management/{position}
, где{position}
- идентификатор модели позиции, которую мы хотим удалить. Код JavaScript может выглядеть примерно так:axios.delete('/job-management/5', this.deletedata).then((res) => { ... })
Я жестко закодировал идентификатор позиции в URL, чтобы четко проиллюстрировать концепцию. Тем не менее, мы, вероятно, хотим использовать переменную для этого идентификатора:
let positionId = // get the position ID somehow axios.delete(`/job-management/${positionId}`, this.deletedata).then((res) => { ... })
URL-адрес в этой форме позволяет фреймворк Laravel маршрутизации удалить запрос контроллера
destroy()
способ. В приведенном выше примере используется строка шаблона ES6 потому что код в вопросе предполагает, что мы используем версию JavaScript, которая поддерживает эту функцию. Обратите внимание на размещение обратных меток (`
) вокруг строки шаблона вместо стандартных кавычек.
Как я вижу в вашем коде выше, вы передаете
Positions
красноречивый в качестве параметра методуdestroy
, но в вашемvueJS
Вы не передаете этот объект. для этого вы передадите его так:axios.delete('/job-management/${id}').then((res)=>{ console.log(res); })
И id param внутри url ur axios delete, он может объект данных или любой думать.
Я надеюсь, что это поможет вам