【问题标题】:DELETE request in laravellaravel 中的 DELETE 请求
【发布时间】:2019-04-18 16:40:13
【问题描述】:

我有一个类别页面并创建一个删除按钮来删除它的类别,图像如下:

所以问题是告诉我'MethodNotAllowedHttpException'

好的。这是路线文件

Route::delete('removeCategory/{id}','AdminController@removeCategory');

控制器文件

 public function removeCategory(Request $id){
    $cats = cats::find($id);
    $cats->delete();

}

查看文件

@foreach($data as $product)
  <tr  style="height:50px">
    <td style="padding:10px">{{$product->cat_name}}</td>
    <td><a class="btn btn-sm btn-fill btn-primary"
           href="{{url('/admin/editCategory')}}/{{$product->id}}">Edit</a></td>
    <td><a href="{{url('admin/removeCategory')}}/{{$product->id}}" onclick="return confirm('Are you sure?')"
       class="btn btn-sm btn-fill btn-primary">Remove</a></td>
  </tr>
@endforeach

感谢任何人与我分享信息,我已经尝试过了,但显示了此错误消息。

【问题讨论】:

  • 别忘了使用{!! method_field('delete') !!}
  • 另外,如果 JS 被禁用,您的 onClick 验证将始终有效,也就是说,如果 JS 确认有效,它将默认删除而不是删除。如果您想进行验证,请确保默认情况下它不起作用,并且只有在您成功验证请求时才会起作用。

标签: javascript php laravel


【解决方案1】:

既然您想在不使用 ajax 使代码复杂化的情况下做到这一点,

解决方案只是发送POST 请求并将DELETE 方法定义为隐藏字段。

为简单起见,您可以使用 method_field helper 添加该字段:

@foreach($data as $product)
  <tr  style="height:50px">
    <td style="padding:10px">{{$product->cat_name}}</td>
    <td><a class="btn btn-sm btn-fill btn-primary"
           href="{{url('/admin/editCategory')}}/{{$product->id}}">Edit</a></td>

    <td>
      <form 
        method="post" 
        action="{{url(''admin/removeCategory')}}/{{$product->id}}"> 

        {!! Form::token() !!}
        {{ method_field('DELETE') }}

        <button 
          type="submit"
          onclick="return confirm('Are you sure?')"
          class="btn btn-sm btn-fill btn-primary">Remove</button>
      </form>
    </td>

  </tr>
@endforeach

并确保在删除对象后返回列表:

public function removeCategory($id) {
  $Cat = cats::find($id);
  if ($Cat) {
    $Cat->delete();
  }
  return redirect()->back();
}

【讨论】:

  • 是的。我已经尝试过您分享的方法,但即使我通过表单进行操作,它仍然显示 MethodNotAllowedHttpException 错误。
  • 感谢大家特别是 num8er 和 Devon 的回答! :)
  • 是的。确实。是一个正确的答案,我投票赞成接受答案,因此任何有相同问题的人都可以作为参考。
【解决方案2】:

MethodNotAllowedHttpException 告诉我们,我们尝试使用该端点不支持的 http 方法类型请求服务器。例如,您尝试在仅允许 DELETE 的 url 上执行 GET 请求。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405

【讨论】:

    【解决方案3】:

    尝试编辑您的路线: Route::get('removeCategory/{id}','AdminController@removeCategory');

    然后将您的控制器编辑为:

    public function removeCategory($id){
        $cats = cats::find($id);
        $cats->delete();
        return response(['Message' => 'This request has been deleted'], 200);
    }
    

    这是上面提供的答案的替代方案,但我建议坚持使用 num8er 提供的答案。

    【讨论】:

      【解决方案4】:
      1. 您必须提交删除请求。看看 num8er 对此的回答。您不必通过表单来完成,您可以通过 AJAX 来完成,但只需使用 &lt;a href 就会产生 GET 请求。

      2. 您还在控制器方法中键入提示 $id 作为 Request 对象。 因此,Laravel 会为你提供一个 Request 对象,而不是 URL 中作为参数传递的数字。您需要删除对该参数的类型提示,或使用实际适合的类型:


       public function removeCategory($id) {
      
       }
      

      【讨论】:

        猜你喜欢
        • 2020-02-14
        • 1970-01-01
        • 1970-01-01
        • 2018-04-27
        • 2018-10-06
        • 1970-01-01
        • 2018-05-23
        • 2012-11-05
        • 2016-12-15
        相关资源
        最近更新 更多