2017-11-17 5 views
5

에서 삭제 리소스 경로를 사용하여 레코드를 삭제하기 have :Laravel 자원 경로 Axios의

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

위의 내용은 항상 "method not allowed"을 반환합니다. 축 delete() 메서드를 사용하여 삭제 요청을 처리하려면 어떻게해야합니까?

+0

"레코드를 삭제하도록 액시오를 설정하고 싶습니다 ..." 하지만 $ positions은 여러 레코드를 삭제하려고한다는 것을 의미합니까? 하나의 리소스 또는 여러 리소스를 삭제하려고하는지 명확히 할 수 있습니까? – Traxo

+0

@CyRossignol 감사합니다. 문제가 해결되었습니다. –

답변

4

Laravel은 MethodNotAllowedHttpException 발생 바랍니다. 자바 스크립트 코드는 POST GET 요청을 지원하는 경로에 의해 처리됩니다 /job‑management의 경로와 URL에 DELETE 요청을 보내기 때문에이 질문의 경우, 우리는이 오류를 참조하십시오. Laravel이 자원이 풍부한 컨트롤러를 기대하는 기존 형식으로 URL을 변경해야합니다.

잘못된 URL로 요청을 보내고 있기 때문에 오류가 혼동 스럽습니다. 의합니다 (documentation에서) 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 

/job-management의 경로 구성 요소로 URL을 컨트롤러의 index()store() 방법 돈 '에 전달 t 요청을 삭제하십시오. 이것이 우리가 예외를 보는 이유입니다.

질문 같이 DELETE 요청을 수행하기 위해, 우리는 {position} 우리가 삭제할 위치 모델의 ID입니다 /job-management/{position}, 같은 경로로 URL에 요청을 보내야합니다. 자바 스크립트 코드는 다음과 같을 수 있습니다.

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

개념을 명확하게 설명하기 위해 위치 ID를 URL에 하드 코드했습니다. 그러나, 우리는 가능성이 ID에 대한 변수를 사용하려면 :이 형태의

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

URL은 경로에 컨트롤러의 destroy() 방법에 삭제 요청을 Laravel 수 있습니다. 위 예제는 ES6 template string literals을 사용합니다.이 코드는이 기능을 지원하는 JavaScript 버전을 사용하고 있음을 나타냅니다. 템플릿 문자열 주위에 표준 따옴표 대신 백틱 (`)을 배치합니다.

3

위의 코드에서 볼 수 있듯이 destroy 메서드에는 매개 변수로 Positions을 전달하지만 vueJS에서는이 개체를 전달하지 않습니다.

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

을 통해 UR Axios의의 URL 내부의 아이디 PARAM, 삭제는 데이터 또는 생각의 개체 수 있습니다 그것을 위해 당신은 다음과 같이 전달할 것입니다.

나는 우리가 경로를 지원하지 않는 HTTP 동사를 사용하여 경로에 요청을 전송하려고 할 때 도움이