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

Laravel 10中Delete路由无法正常工作问题求助

Laravel 10中LicenseCompany的Delete路由返回204无内容问题解决

核心问题与修复步骤

1. 修正HTTP状态码的使用

HTTP 204状态码的规范就是请求成功但不返回任何响应内容,所以你哪怕在response()->json()里传了数据,客户端也收不到内容。如果需要返回删除成功的提示,改用200状态码,同时补上实际的删除操作:

public function destroy(LicenseCompany $company)
{
    $company->delete(); // 执行删除逻辑
    return response()->json(['message' => '公司信息已成功删除'], 200);
}

2. 清理冗余的路由定义

你在api.php里同时写了单独的Delete路由和resource路由,这属于重复定义。Laravel的resource路由已经自动生成了DELETE /license/companies/{company}这条路由,所以删掉单独定义的那一行即可:

Route::prefix('license')->group(function () {
    // 移除重复的Delete路由:Route::delete('companies/{company}', [LicenseCompanyController::class, 'destroy']);
    Route::resource('companies', LicenseCompanyController::class);
    Route::resource('licenses', LicenseController::class);
    Route::get('licenses/{license}', [LicenseController::class, 'updateAvailableQuantity']);
});

3. 确认路由模型绑定正常

你的destroy方法用了隐式路由模型绑定(LicenseCompany $company),只要满足以下两点就没问题:

  • 路由参数名{company}和方法参数名$company完全一致(你的代码已经符合)
  • 数据库表license_companies的主键是id(Laravel默认配置,没改的话不用管)

额外说明

  • 如果一定要用204状态码,那就别返回JSON数据,用Laravel提供的快捷方法更规范:
    public function destroy(LicenseCompany $company)
    {
        $company->delete();
        return response()->noContent(); // 等价于返回204无内容
    }
    
  • 前端调用时要确认:请求方法是DELETE,并且正确传了对应的公司ID参数
  • API路由默认关闭了CSRF验证,所以不用考虑这个问题;如果加了权限中间件,要确保当前请求有权限执行删除操作

内容的提问来源于stack exchange,提问作者HAssanLFG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:04:51