在Laravel中删除请求

时间:2018-11-15 14:37:18

标签: javascript php laravel

我有一个类别页面,并创建一个删除按钮以将其删除类别,图像如下: enter image description here

所以问题出在给我看' 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

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

4 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:7)

由于您希望这样做而不会使代码与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();
}

答案 2 :(得分:1)

尝试编辑您的路线: 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提供的答案。

答案 3 :(得分:1)

  1. 您必须提交DELETE请求。查看num8er的答案。您不必通过表单进行操作,可以通过AJAX进行操作,但是仅使用<a href就会产生GET请求。

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


 public function removeCategory($id) {

 }