042157-修复宝箱开启验证器缺失问题.md 2.6 KB

修复宝箱开启验证器缺失问题

任务时间

  • 开始时间:2025年06月04日 21:57:19 CST
  • 完成时间:2025年06月04日 22:02:44 CST

问题描述

用户报告宝箱开启功能出现错误:

Class "App\Module\GameItems\Validators\ChestOpenCostValidator" not found

错误发生在 app/Module/GameItems/Validations/ChestOpenValidation.php:51

问题分析

通过代码分析发现:

  1. ChestOpenValidation 中引用了不存在的 ChestOpenCostValidator
  2. 宝箱系统已经升级为使用消耗组系统,不再需要单独的消耗验证器
  3. ChestItemValidator 中使用了错误的枚举值 ITEM_TYPE::OPENABLE,应该是 ITEM_TYPE::CHEST
  4. 宝箱配置验证逻辑使用了旧的 ItemChestContent,应该使用新的 ItemChestConfig

解决方案

  1. 创建 ChestConsumeValidator

    • 新建 app/Module/GameItems/Validators/ChestConsumeValidator.php
    • 实现基于消耗组系统的宝箱消耗验证逻辑
    • 检查宝箱配置中的消耗组ID,如果存在则验证用户是否满足消耗条件
  2. 修复 ChestOpenValidation

    • ChestOpenCostValidator 替换为 ChestConsumeValidator
    • 更新相应的 use 语句
  3. 修复 ChestItemValidator

    • ITEM_TYPE::OPENABLE 修正为 ITEM_TYPE::CHEST
    • ItemChestContent 替换为 ItemChestConfig
    • 更新宝箱配置验证逻辑,检查是否配置了奖励组

修改文件

  1. app/Module/GameItems/Validators/ChestConsumeValidator.php - 新建
  2. app/Module/GameItems/Validations/ChestOpenValidation.php - 修改
  3. app/Module/GameItems/Validators/ChestItemValidator.php - 修改

测试验证

使用命令 php artisan debug:reproduce-error 68973982 进行测试:

  • 修复前:返回 500 错误,提示类不存在
  • 修复后:返回 200 状态码,正常处理业务逻辑(虽然返回业务错误,但系统错误已解决)

技术要点

  1. 消耗组系统集成:新的宝箱系统使用统一的消耗组/奖励组/条件组架构
  2. 验证器模式:遵循现有的 Validator 类设计模式,使用 addError 方法处理错误
  3. 枚举值修正:确保使用正确的 ITEM_TYPE 枚举值
  4. 配置模型更新:适配新的宝箱配置数据结构

提交信息

修复宝箱开启验证器缺失问题

- 创建ChestConsumeValidator替代不存在的ChestOpenCostValidator
- 修复ChestItemValidator中ITEM_TYPE::OPENABLE为ITEM_TYPE::CHEST
- 更新宝箱配置验证逻辑,使用ItemChestConfig替代ItemChestContent
- 适配新的消耗组系统验证逻辑

状态

✅ 已完成并推送到远程仓库