You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:45:02