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

Laravel 中处理合同查询空值的 Try Catch 逻辑错误问题

代码存在的核心问题
  • 分支判断完全倒置:当前逻辑中empty($contratos)匹配的是“未查询到合同”的场景,却触发了200状态码返回空数组的分支;反而非空(成功查到合同)的场景会走进“合同未找到”的406分支,和需求逻辑完全相反。
  • 异常块变量引用错误:catch 语句捕获的异常对象赋值给了$e,但内部判断逻辑引用了未定义的$exception变量,运行到异常分支时会直接触发PHP未定义变量警告,根本无法执行自定义的错误返回。
  • try-catch适用场景错位:“未查询到合同”是可直接判断的常规业务分支,不需要依赖异常捕获实现,当前把业务判断硬塞进try块的逻辑本身没有问题,但之前的分支写反才是核心原因。
可直接运行的修正版本
try {
    // 此处保留原有查询$contratos的业务逻辑
    if (empty($contratos)) {
        // 空结果时返回要求的错误提示与406状态码
        return response()->json([
            "message" => "合同未找到",
            "code" => "CONTRACT_NOT_FOUND"
        ], 406);
    }
    // 查到结果时正常返回200状态码与合同数据
    return response()->json($contratos, 200);
} catch (\Exception $e) {
    // 修正异常变量引用错误,仅处理运行时抛出的406类异常
    if ($e->getCode() == 406) {
        return response()->json([
            "message" => "合同未找到",
            "code" => "CONTRACT_NOT_FOUND"
        ], 406);
    }
    // 其他未覆盖的异常统一返回500状态码
    return response()->json([
        "message" => "服务器内部处理错误",
        "code" => "SERVER_ERROR"
    ], 500);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 01:15:03