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

Laravel中创建或恢复支付网关控制器的最佳重构方案

支付网关创建逻辑重构方案

核心优化点

  • 语义化方法调用:用Laravel原生restore()方法替代手动赋值deleted_at = null,可读性更高
  • 冗余嵌套精简:去掉不必要的else分支,提前终止逻辑降低代码嵌套层级
  • 业务逻辑分层:将网关恢复、审核状态重置的逻辑从控制器剥离到模型层,可复用性更强
  • 错误提示标准化:给自定义状态码补充明确的响应信息,降低前端对接成本
  • 兼容原有逻辑:完全保留原有锁机制、竞态条件规避方案和业务规则,不会产生业务变更风险

优化后代码

模型层(app/Models/Gateway.php)新增复用方法

/**
 * 恢复软删除网关,同步更新字段并按规则重置审核状态
 */
public function restoreWithUpdate(array $validatedData): self
{
    if ($this->is_blocked) {
        abort(452, '该网关已被系统封禁,无法恢复使用');
    }
    
    $this->fill($validatedData);
    
    // 网站或描述字段变更时重置审核状态
    if ($this->isDirty(['website', 'description'])) {
        $this->rejection_reason = null;
        $this->is_verified = null;
    }
    
    $this->restore();
    $this->save();
    
    return $this;
}

控制器层优化后代码

/**
 * 创建新的支付网关
 * 
 * @param  \App\Http\Requests\StoreGatewayRequest  $request
 * @return \App\Http\Resources\GatewayResource
 */
public function create(StoreGatewayRequest $request)
{
    try {
        $gateway = DB::transaction(function () use ($request) {
            // 查询当前用户名下对应website的软删除记录,加锁避免竞态
            $trashedGateway = $request->user()->gateways()
                ->onlyTrashed()
                ->where('website', $request->website)
                ->lockForUpdate()
                ->first();

            if ($trashedGateway) {
                return $trashedGateway->restoreWithUpdate($request->validated());
            }
            
            // 无匹配软删除记录则新建网关
            return $request->user()->gateways()->create($request->validated());
        });
    } catch (QueryException $e) {
        if ($e->errorInfo[1] === 1062) {
            abort(409, '该网站对应的支付网关已存在,请勿重复提交');
        }
        throw $e;
    }

    return new GatewayResource($gateway);
}

可选进阶优化

如果后续业务复杂度上升,还可以做如下扩展:

  • 把业务逻辑单独抽成CreateGatewayAction单动作类,控制器只做请求校验和响应封装,完全解耦业务逻辑
  • 新增网关创建/恢复的事件监听,后续需要加操作日志、通知管理员等需求不需要改动核心逻辑
  • 把硬编码的状态码提取成枚举类,统一维护避免散落在代码各处

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:45:02