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

Ber*_*man 1 laravel laravel-5

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

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

        return redirect('/admin')->with('success', 'User has been deleted');
    }
Run Code Online (Sandbox Code Playgroud)

并将路由定义为:

Route::post('/admin/delete/{id}', 'AdminController@destroy')    
    ->middleware('is_admin')    
    ->name('admin.destroy');
Run Code Online (Sandbox Code Playgroud)

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

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

每当我按下按钮删除用户时,都会得到:

The DELETE method is not supported for this route. Supported methods: GET, HEAD.
Run Code Online (Sandbox Code Playgroud)

我只是不知道我在做什么错。我尝试将路线类型更改为发布,但收到相同的错误。

Ptr*_*Ton 7

您的表单不包含action,因此会将其提交到与之相同的URL,即GET / HEAD。

尝试以下方法:

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

  • 除了PtrTon指出的问题外,您的路线还定义为“ POST”,但您要在表单中添加@@ method('DELETE')`。它不会中断,因为表单本身使用的是POST,并且Laravel仅在使用`DELETE`或`PUT`作为路线的方法时检查由@ method`创建的_method输入的存在。无论如何,您应该将路由更新为`Route :: post(...)`或在视图中删除方法帮助器。我建议使用删除路由,因为这是正确的方法。 (3认同)