javascript laravel中的DELETE请求

vof42yt1  于 2023-01-04  发布在  Java
关注(0)|答案(4)|浏览(203)

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

因此,问题是显示"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

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

smdncfj3

smdncfj31#

既然你想做它而不复杂的代码与 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();
}

**UPD.:**此答案可能有点过时,新版本的Laravel可能会删除Form类。如果您看到:Class "Form" not found安装laravelcollective\html软件包

composer require laravelcollective/html

或删除Form::token()
或替换为:此处描述的csrf_token

9lowa7mx

9lowa7mx2#

MethodNotAllowedHttpException告诉我们,我们尝试使用该端点不支持的http方法类型请求服务器。例如,您尝试在只允许DELETE的url上执行GET请求。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405

dgenwo3n

dgenwo3n3#

尝试编辑您的路线到:第一个月
然后将控制器编辑为:

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

这是上面提供的答案的另一种选择,尽管我会建议坚持num8er提供的答案。

hi3rlvi2

hi3rlvi24#

1.你必须提交一个DELETE请求,看看num8er的回答,你不必通过表单来完成,你可以通过 AJAX 来完成,但是仅仅使用<a href就会导致一个GET请求。
1.您还在controller方法中提示$id作为Request对象。因此,Laravel将为您提供一个Request对象,而不是作为URL中的参数传递的数字。您需要删除该参数上的类型提示,或使用实际适合的类型:

public function removeCategory($id) {

 }

相关问题