Laravel - DELETE 方法不支持删除路由

Posted

技术标签:

【中文标题】Laravel - DELETE 方法不支持删除路由【英文标题】:Laravel - DELETE method is not support for a delete route 【发布时间】:2019-09-10 07:33:12 【问题描述】:

我是 laravel 的初学者,目前正在制作一个简单的管理面板。我有一个显示用户(姓名、电子邮件等)的网格,我遇到的问题可能很愚蠢,但我无法弄清楚。我创建了一个用于删除用户的控制器方法:

public function destroy($id)
    
        $user = User::find($id);
        $user->delete();

        return redirect('/admin')->with('success', 'User has been deleted');
    

并将路线定义为:

Route::post('/admin/delete/id', 'AdminController@destroy')    
    ->middleware('is_admin')    
    ->name('admin.destroy');

为了删除网格中的用户,我在视图中使用了表单,甚至设置了标题:

<td>
<form href=" route('admin.destroy', $user->id)" method="post">
   @method('DELETE')
   @csrf
   <input class="btn btn-danger" type="submit" value="Delete" />
</form>

每次我按下删除用户的按钮时,我都会得到这个:

The DELETE method is not supported for this route. Supported methods: GET, HEAD.

我就是想不通我做错了什么。我尝试将路线类型更改为发布,但我得到了同样的错误。

【问题讨论】:

***.com/questions/46307094/… 检查此链接.. 【参考方案1】:

您的表单不包含action,因此它会将其提交到与它相同的网址,即只有GET/HEAD。

试试这个:

<form action=" route('admin.destroy', $user->id)" method="post">
   @method('DELETE')
   @csrf
   <input class="btn btn-danger" type="submit" value="Delete" />
</form>

【讨论】:

除了 PtrTon 指出的问题之外,您的路线定义为 POST,但您在表单中添加了 @method('DELETE')。它不会中断,因为表单本身正在使用 POST,如果您使用 DELETEPUT 作为路由方法,Laravel 只会检查由 @method 创建的 _method 输入是否存在。无论如何,您应该更新您的路线到Route::post(...) 或删除您视图中的方法助手。我建议使用删除路线,因为这是正确的做法。

以上是关于Laravel - DELETE 方法不支持删除路由的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 6.0 不支持 DELETE、PUT 方法

laravel向我显示此错误此路由不支持POST方法。支持的方法:GET,HEAD,PUT,DELETE

Django学习路19_is_delete属性,重写类方法,显性隐性属性

Django学习路19_is_delete属性,重写类方法,显性隐性属性

laravel中delete()方法和destroy()方法的区别

Laravel5.1 模型--删除