2017-11-17 4 views
1

두 개의 텍스트 필드와 두 개의 단추 (편집 및 삭제)가있는 양식이 있습니다. 편집 단추를 누르면 제대로 작동하지만 삭제 단추를 누르면 'MethodNotAllowedHttp' 예외. 다음과 같이 내 코드는 다음과 같습니다메서드가 허용되지 않음 Laravel의 HTTP 예외 5.4

Route::post('/doctors/update', '[email protected]'); 
Route::delete('/doctors/{doctor}/delete', '[email protected]'); 

어떤 도움에 감사드립니다 다음과 같이

<form action="/laboratory/doctors/update" method="POST"> 
    {{ csrf_field() }} 
    {{ method_field('DELETE') }} 
    <div class="form-group"> 
     <label for="name">Name:</label> 
     <input type="text" class="form-control" id="name" aria-describedby="name" value="{{ $doctor->name }}"> 
    </div> 
    <div class="form-group"> 
     <label for="percentage">Percentage:</label> 
     <input type="text" class="form-control" id="percentage" value="{{ $doctor->percentage }}"> 
    </div> 
    <button type="submit" class="btn btn-success">Save Changes</button> 
    <a href="/laboratory/doctors/{{ $doctor->id }}/delete" class="btn btn-danger">Delete</a> 
</form> 

내 경로이다.

+0

액션이'action = "/ laboratory/doctors/update"method = "POST"'와 같은 형식으로되어 있다고 생각합니다. 삭제 방법이 있으므로 오류가 발생했습니다! –

답변

0

앵커 html 요소의 Href는 GET 호출이되지만 경로는 Delete 호출을 기대합니다. 삭제 전화가 걸리게 할 수있는 몇 가지 방법이 있습니다.

가장 일반적인 방법 중 하나는 서버에 데이터를 게시하는 대신 양식을 사용하는 것입니다.

나는 그것이 버튼의 값을 읽고 삭제 게시물의 해당 {doctor}에서 그 번역 할 수 있도록 한 번만 {{ Form::open(...) }}{{ Form::close() }}를 사용하여 컨트롤러 코드를 리팩토링하는 것이 좋습니다 모범 사례를 들어

{{ Form::open(['url' => '/laboratory/doctors/{{ $doctor->id }}/delete', 'method' => 'DELETE']) }} 
{{ Form::button('delete', ['type' => 'submit', 
          'class' => 'btn btn-danger']) }} 
{{ Form::close() }} 

삭제 그래서 당신은 당신의 코드에 여러 HTML 양식을 가지고 있지 않습니다.

1

http 동사의 경로를 delete 유형으로 작성했으며 유형을 get으로 만들려고했습니다. 그래서 대신

Route::get('/laboratory/doctors/{doctor}/delete', '[email protected]'); 

delete는 또한 다른 DELETE으로 HTTP 동사를 만드는 방법 그러나 현재 form 태그의 외부

  1. 또 다른 form 태그를 사용하여이 get로 변경할 수 있습니다.
  2. 또는 사용 아약스는 삭제 버튼을 클릭하면 버튼을 눌러 기능을 파괴 실행 ..이 delete 유형
+0

OP에서/실험실을 접두사로 사용할 수 있습니다! –

+0

@HirenGohel : 예 감사합니다 – C2486

+1

@HirenGohel : 대답을 업데이트했습니다 – C2486

0
@if(isset($doctor)) 
<form action="/laboratory/doctors/{{$doctor->id}}/delete" method="POST"> 
@else 
<form action="/laboratory/doctors/update" method="POST"> 
@endif 
    {{ csrf_field() }} 
    @if(isset($doctor)) 
    {{ method_field('DELETE') }} 
    @endif 
    <div class="form-group"> 
     <label for="name">Name:</label> 
     <input type="text" class="form-control" id="name" aria-describedby="name" value="{{ $doctor->name }}"> 
    </div> 
    <div class="form-group"> 
     <label for="percentage">Percentage:</label> 
     <input type="text" class="form-control" id="percentage" value="{{ $doctor->percentage }}"> 
    </div> 
    <button type="submit" class="btn btn-success">Save Changes</button> 
    <a href="/laboratory/doctors/{{ $doctor->id }}/delete" class="btn btn-danger">Delete</a> 
</form> 

문제는 당신의 행동에 만들하지만 형태는 업데이트 기능을 실행합니다. 따라서 폼 액션을 분리하거나 아약스를 사용하여 삭제할 수 있습니다.

관련 문제