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

Laravel中Axios DELETE请求持续返回404错误求助

Laravel DELETE请求进入控制器仍返回404问题排查

问题描述

在Laravel项目中使用Axios发起DELETE请求时持续收到404错误,已确认路由配置正确、刷新路由缓存,且epHash与fileHash参数无误。测试验证请求已进入PHP控制器方法(在声明$file前生成了文本文件),但仍报错,Laravel日志无相关记录,需要让请求正常执行。

相关代码

PHP控制器代码

public function deleteFile($epHash, $fileHash) {
    $user = Auth::user();

    if (!Auth::check() || !$user->is_admin) {
        abort(500);
    }

    $file = File::findOrFail($fileHash);

    Storage::delete($file->path . $file->name);
    $file->delete();
    return response()->json([
        'advisors' => Advisor::with([
            "user.person.contactInfo",
            "clients",
            "clients.person.contactInfo",
            "clients.spouse",
            "clients.estatePlans",
            "clients.estatePlans.files",
            "user.person",
            "clients.estatePlans.files.createdBy"
        ])->get(),
    ]);
}

路由配置

Route::delete('/api/estatePlan/{epHash}/{fileHash}/delete', [Controllers\ClientInfoController::class, 'deleteFile']);

JavaScript代码

deleteFile(epHash, fileHash) {
    Swal.fire({
        title: "Are you sure you want to delete this file?",
        icon: "warning",
        showCancelButton: true,
        confirmButtonText: "Yes",
        cancelButtonText: "No",
    }).then((result) => {
        if (result.isConfirmed) {
            axios
                .delete(`/api/estatePlan/${epHash}/${fileHash}/delete`)
                .then((response) => {
                    console.log("DELETED FILE SUCCESSFULLY");
                })
                .catch((error) => {
                    console.log(error.response);
                });
        }
    });
},

排查与解决方案

因为请求已进入控制器方法,说明路由匹配正常,404错误的核心原因是findOrFail($fileHash)抛出的ModelNotFoundException——Laravel会将这个异常默认转换为404响应,且默认不会写入日志。

  1. 检查File模型的主键匹配

    • 如果fileHash对应的不是File模型的默认主键(id),而是表中的其他字段(比如hash字段),findOrFail会找不到数据抛出404。需要修改查询逻辑:
      // 替换原有的$file = File::findOrFail($fileHash);
      $file = File::where('hash', $fileHash)->firstOrFail();
      
    • 如果File模型的主键确实是fileHash对应的字段,需要在模型中显式指定:
      class File extends Model {
          protected $primaryKey = 'hash'; // 替换为实际主键字段名
          public $incrementing = false; // 若主键不是自增整数,必须添加此配置
      }
      
  2. 验证fileHash的实际值
    在控制器方法开头临时添加日志输出,确认传入的fileHash与数据库中的记录一致:

    public function deleteFile($epHash, $fileHash) {
        \Log::info('Received fileHash: ' . $fileHash); // 临时日志
        // 原有代码...
    }
    

    查看storage/logs/laravel.log文件,核对fileHash值是否正确。

  3. 修正权限错误的HTTP状态码
    当前权限不足时返回500(服务器错误)不符合HTTP规范,应改为返回403(禁止访问):

    if (!Auth::check() || !$user->is_admin) {
        abort(403);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:22:54