Маршрут ресурса 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 5

2 ответа:

Laravel бросает MethodNotAllowedHttpException, Когда мы пытаемся отправить запрос на маршрут, используя глагол HTTP, который маршрут не поддерживает. В случае этого вопроса мы видим эту ошибку, потому что код JavaScript отправляет запросDELETE на URL-адрес с путем /job‑management, который обрабатывается маршрутом, который поддерживает только запросыGET иPOST . Нам нужно изменить URL на обычный формат, который ожидает Laravel для ресурсных контроллеров.

Ошибка заключается в том, что сбивает с толку, потому что скрывает тот факт, что мы посылаем запрос на неправильный URL. Чтобы понять почему, давайте взглянем на маршруты, созданные Route::resource() (из документации ):

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
Как показано выше, URL-адреса с компонентом пути /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, он может объект данных или любой думать.

Я надеюсь, что это поможет вам