我是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.
我只是不知道自己在做什么错。我尝试将路线类型更改为发布,但收到相同的错误。
答案 0 :(得分:5)
您的表单不包含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>
答案 1 :(得分:0)
您不需要@method选项。您在web.php中将该路由标记为发布路由。
<form action="{{ route('admin.destroy', $user->id)}}" method="post">
@csrf
<input class="btn btn-danger" type="submit" value="Delete" />
</form>