Laravel 5.4中的方法不允许HTTP异常

时间:2017-11-17 12:27:32

标签: laravel

我有一个带有两个文本字段和两个按钮(编辑和删除)的表单,当我按下编辑按钮时,它工作正常,但是当我按下删除按钮时,它会给出方法#NotAllowedHttp'例外。我的代码如下:

<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>  

我的路线如下:

Route::post('/doctors/update', 'DoctorsController@update');
Route::delete('/doctors/{doctor}/delete', 'DoctorsController@destroy');  

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您已将http谓词的路由创建为delete类型,并尝试获取get类型。因此,您可以将其更改为get而不是delete

 Route::get('/laboratory/doctors/{doctor}/delete', 'DoctorsController@destroy');

还有其他方法可以将http动词设为DELETE,但使用

  1. 当前form代码之外的另一个form代码。
  2. 或使用ajax使其delete类型

答案 1 :(得分:0)

锚点html元素上的Href将导致GET调用,但您的路由期望删除调用。您可以通过某些方法确保删除调用。

最常见的方法之一是使用表单将数据发布到服务器。

删除

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

为了达到最佳效果,我建议只使用{{ Form::open(...) }} {{ Form::close() }}一次并重构您的控制器代码,以便它可以从按钮读取值并将其转换为删除的相应{doctor}中的值发布,所以你的代码中没有多个html表单。

答案 2 :(得分: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> 

问题在于您的操作..当您单击删除按钮时,该按钮运行destroy函数,但表单运行更新功能。因此,您必须分离表单操作,或者可以使用ajax

将其删除