2017-11-17 25 views
5

Chciałbym konfiguracji Axios usunąć rekord używając trasy zasobu:laravel trasa zasób usunąć z Axios

axios.delete('/job-management', this.deletedata).then((res)=>{ 
    console.log(res); 
}) 

Dla moich trasach mam:

Route::resource('job-management', "PositionsController", [ 'as' => 'jobs']); 

Teraz, moim PositionsController I ma:

public function destroy(Positions $positions) { 
    return $positions; 
} 

Ale powyższe zawsze zwraca "metoda niedozwolona". Jak mogę obsłużyć żądanie usunięcia za pomocą metody axios delete()?

+0

"Chciałbym ustawić axios, aby usunąć' rekord' ... " , ale' $ positions' oznacza, że ​​chciałbyś usunąć wiele rekordów? Czy możesz wyjaśnić, czy próbujesz usunąć pojedynczy zasób lub wiele zasobów? – Traxo

+0

@CyRossignol Dzięki temu rozwiązano problem –

Odpowiedz

4

laravel rzuca MethodNotAllowedHttpException gdy staramy się wysłać wniosek do trasy przy użyciu czasownika HTTP, że trasa nie obsługuje. W przypadku tego pytania, widzimy ten błąd ponieważ kod JavaScript wysyła DELETE żądanie do adresu URL ze ścieżką /job‑management, który jest obsługiwany przez trasie, która obsługuje tylko GET i POST żądań. Musimy zmienić adres URL na konwencjonalny format, którego Laravel oczekuje od pomysłowych kontrolerów.

Błąd jest mylący, ponieważ ukrywa fakt, że wysyłamy żądanie pod niewłaściwy URL. Aby zrozumieć dlaczego, rzućmy okiem na trasach stworzonych przez Route::resource() (z documentation):

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 

Jak przedstawiono powyżej, adres URL komponentu ścieżki z /job-management są przekazywane do kontrolera index() i store() metod, które don” t obsłużyć DELETE żądań. Właśnie dlatego widzimy wyjątek.

Aby wykonać DELETE żądania, jak pokazano na pytanie, musimy wysłać żądanie do adresu URL ze ścieżką jak /job-management/{position}, gdzie {position} jest identyfikator modelu pozycji, którą chcemy usunąć. Kod JavaScript może wyglądać mniej więcej tak:

axios.delete('/job-management/5', this.deletedata).then((res) => { ... }) 

Zrobiłem na stałe ID pozycji w adresie URL, aby jasno zilustrować tę koncepcję. Jednakże, prawdopodobnie chcesz użyć zmiennej dla tego ID:

let positionId = // get the position ID somehow 
axios.delete(`/job-management/${positionId}`, this.deletedata).then((res) => { ... }) 

URL w tej postaci umożliwia laravel aby przekierować DELETE prośbę do destroy() metody kontrolera. Powyższy przykład używa ES6 template string literals, ponieważ kod w pytaniu sugeruje, że używamy wersji JavaScript obsługującej tę funkcję. Zwróć uwagę na rozmieszczenie lewostronnych (`) wokół ciągu szablonów zamiast standardowych cudzysłowów.

3

Jak widzę w powyższym kodzie, podajesz Positions elokwentny jako parametr do metody destroy, ale w swoim vueJS nie przekazujesz tego obiektu. przez które przechodzą to tak:

axios.delete('/job-management/${id}').then((res)=>{ 
    console.log(res); 
}) 

i param id wewnątrz url ur Axios usunąć, może to obiekt danych lub jakiegokolwiek myślenia.

mam nadzieję, że to pomoże Ci

Powiązane problemy