101101-修复Validation使用不规范问题.md 6.0 KB

修复Validation使用不规范问题

任务时间

  • 开始时间:2025年06月10日 11:01:25 CST
  • 完成时间:2025年06月10日 11:11:00 CST

问题描述

发现代码库中存在多个Validation使用不规范的问题:

  1. 使用了不存在的ValidationMessage trait
  2. 使用了throwMessage方法而不是规范的addError方法
  3. 错误处理方式不统一

问题分析

通过代码分析发现以下文件存在不规范用法:

使用了不存在的ValidationMessage trait的文件:

  • UCore/Validator/ModelRelatedValidator.php
  • UCore/Validator/DataValidation.php
  • UCore/Validator/ForeachValidation.php
  • UCore/Validator/ReverseValidator.php
  • UCore/Validator/ReverseValidatorDataValidator.php
  • UCore/Validator/ModelUnidValidator.php

使用了throwMessage方法的文件:

  • UCore/Validator/ModelRelatedValidator.php
  • UCore/Validator/DataValidation.php
  • UCore/Validator/ForeachValidation.php

解决方案

1. 移除ValidationMessage trait

移除所有文件中对不存在的ValidationMessage trait的使用。

2. 替换throwMessage为addError

将所有throwMessage方法调用替换为规范的addError方法调用。

3. 改进错误处理逻辑

  • 使用$this->addError()方法添加错误信息
  • 提供清晰的中文错误消息
  • 统一错误处理方式

修改文件详情

UCore下的Validator文件修复

1. UCore/Validator/ModelRelatedValidator.php

修改内容

  • 移除ValidationMessage trait
  • 移除未使用的User导入
  • throwMessage替换为addError
  • 添加详细的中文注释
  • 改进错误消息格式

2. UCore/Validator/DataValidation.php

修改内容

  • 移除ValidationMessage trait
  • throwMessage替换为addError
  • 简化验证逻辑
  • 添加详细的中文注释

3. UCore/Validator/ForeachValidation.php

修改内容

  • 移除ValidationMessage trait
  • throwMessage替换为addError
  • 改进数组遍历验证逻辑
  • 添加详细的中文注释

4. UCore/Validator/ReverseValidator.php

修改内容

  • 移除ValidationMessage trait
  • 添加addError调用
  • 改进反向验证逻辑
  • 添加详细的中文注释

5. UCore/Validator/ReverseValidatorDataValidator.php

修改内容

  • 移除ValidationMessage trait
  • 添加addError调用
  • 改进反向验证逻辑(使用完整数据)
  • 添加详细的中文注释

6. UCore/Validator/ModelUnidValidator.php

修改内容

  • 移除ValidationMessage trait
  • 添加addError调用
  • 改进唯一性验证逻辑
  • 修正变量名(filed -> field)
  • 添加详细的中文注释

app模块下的Validation文件修复

7. app/Module/Game/Validation/SkinValidation.php

修改内容

  • 完全重构为标准的ValidationCore规范
  • 移除自定义的changeSkin()方法
  • 实现标准的rules()方法
  • 移除动态属性定义(skinId、userId)
  • 使用标准的Validator实例化方式

8. app/Module/AppGame/Handler/User/GameSkinHandler.php

修改内容

  • 修改为使用标准的Validation方式
  • 使用validated()方法而不是自定义changeSkin()方法
  • 使用标准的ValidateException异常处理
  • 移除动态属性赋值

9. app/Module/GameItems/Validation/ItemQuantityValidation.php

修改内容

  • 为所有属性添加正确的类型声明
  • 使用nullable类型和默认值
  • 改进属性注释格式

10. app/Module/AppGame/Validations/ValidationUser.php

修改内容

  • 为user属性添加正确的类型声明
  • 移除未使用的import
  • 使用nullable类型和默认值

11. app/Module/User/Validation/LoginValidation.php

修改内容

  • 为userLogic和user属性添加正确的类型声明
  • 使用nullable类型和默认值
  • 改进属性注释格式

技术要点

1. 规范的错误处理方式

// ❌ 错误的方式
$this->throwMessage($params, $message);

// ✅ 正确的方式
$this->addError("具体的错误消息");

2. Validator基类提供的方法

  • addError(string $msg, string $field = '') - 添加错误消息
  • addErrorTpl($params, $template, $field = '') - 添加模板错误消息
  • validationSet($name, $value) - 设置验证对象属性

3. 验证器规范

  • 继承自UCore\Validator
  • 实现validate(mixed $value, array $data): bool方法
  • 使用addError方法处理错误
  • 返回true表示验证通过,false表示验证失败

验证结果

  • 所有修改的文件语法检查通过
  • 移除了不存在的trait依赖
  • 统一了错误处理方式
  • 修复了动态属性问题,添加了正确的类型声明
  • 统一了Validation使用规范
  • 改进了代码可读性和维护性

提交信息

第一次提交

修复Validation使用不规范问题

- 移除不存在的ValidationMessage trait的使用
- 将throwMessage方法替换为addError方法
- 改进错误处理逻辑,使用规范的addError方式
- 添加详细的中文注释和文档
- 修复的文件:
  * UCore/Validator/ModelRelatedValidator.php
  * UCore/Validator/DataValidation.php
  * UCore/Validator/ForeachValidation.php
  * UCore/Validator/ReverseValidator.php
  * UCore/Validator/ReverseValidatorDataValidator.php
  * UCore/Validator/ModelUnidValidator.php

第二次提交

修复app模块下Validation使用不规范问题

- 修复SkinValidation:改为标准的ValidationCore规范,使用rules()方法而不是自定义changeSkin()方法
- 修复GameSkinHandler:使用标准的validated()方法进行验证,而不是自定义验证方式
- 修复属性类型声明:为ValidationUser、LoginValidation、ItemQuantityValidation添加正确的类型声明
- 移除未使用的import,统一使用nullable类型和默认值
- 确保所有Validation类遵循规范的使用方式

状态

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

后续建议

  1. 在代码审查中检查Validator的使用规范
  2. 建议创建Validator使用规范文档
  3. 考虑添加静态分析工具检查不规范用法
  4. 定期检查是否有新的不规范用法引入