如何通过HTML表单与JavaScript调用Laravel的destroy方法发起delete请求?
Laravel使用DELETE请求调用destroy方法的实现步骤
第一步:先配置正确的路由
首先在routes/api.php中定义DELETE类型的路由:use App\Http\Controllers\PessoaController; Route::delete('/pessoas/{pessoa}', [PessoaController::class, 'destroy']);如果你用的是资源路由,直接写
Route::apiResource('pessoas', PessoaController::class);就会自动生成对应的DELETE路由。第二步:调整表单提交逻辑
HTML原生表单仅支持GET和POST两种请求方法,所以需要用Laravel提供的「方法欺骗」功能模拟DELETE请求,同时你需要在请求路径中带上要删除的资源ID,修改后的表单代码如下:<!-- 这里{{ $pessoa->id }}替换为你实际要删除的Pessoa记录的主键ID --> <form action="http://127.0.0.1:8000/api/pessoas/{{ $pessoa->id }}" method="POST"> @csrf @method('DELETE') <button type="submit">删除该记录</button> </form>其中
@method('DELETE')会生成一个隐藏的_method字段,Laravel会识别该字段的值作为实际请求方法,匹配到对应的destroy方法。可选:AJAX发起DELETE请求
如果你用异步请求的方式,可以直接发起DELETE类型的请求,示例代码(以axios为例):// 替换为实际要删除的记录ID const pessoaId = 1; axios.delete(`http://127.0.0.1:8000/api/pessoas/${pessoaId}`, { headers: { 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content } }).then(() => { // 手动执行跳转,因为AJAX不会自动响应控制器返回的重定向 window.location.href = 'http://localhost:5500/index.html'; })
注意:如果你当前请求走的是api路由组,且路由没有配置csrf中间件,AJAX请求可以省略X-CSRF-TOKEN参数。另外控制器的destroy方法返回的redirect仅对表单提交生效,异步请求需要手动处理跳转逻辑。
内容的提问来源于stack exchange,提问作者Alisson
相关产品推荐
相关产品推荐

