优化合成系统的Validation逻辑,移除旧版合成系统的残留代码,统一使用组系统进行验证。
$canCraft['ValidateException'] 应该是 $canCraft['can_craft']CraftMaterialsValidator 仍在使用旧的材料验证逻辑// 修复前
if (!$canCraft['ValidateException']) {
throw new Exception($canCraft['reason']);
}
// 修复后
if (!$canCraft['can_craft']) {
throw new ValidateException($canCraft['reason']);
}
// 修复消耗结果检查
if ($consumeResult->error) {
throw new LogicException("消耗失败: " . $consumeResult->message);
}
// 修复奖励结果检查
if ($rewardResult->success) {
$rewardItems = $rewardResult->items;
}
// 修复日志记录
'materials' => $consumeResult->data['consumed'] ?? [],
// 修复错误返回
return Res::error('合成失败: ' . $e->getMessage());
文件: app/Module/GameItems/Validators/CraftConsumeValidator.php
ConsumeService::checkConsume进行验证支持倍数参数,验证多倍消耗
// 使用消耗组服务检查消耗条件
$checkResult = ConsumeService::checkConsume($userId, $recipe->consume_group_id, $quantity);
if (!$checkResult->success) {
$this->addError($checkResult->message);
return false;
}
文件: app/Module/GameItems/Validators/CraftConditionValidator.php
ConditionService::checkCondition进行验证如果配方没有条件组,则直接通过验证
// 使用条件组服务检查条件
$checkResult = ConditionService::checkCondition($userId, $recipe->condition_group_id);
if (!$checkResult['success']) {
$this->addError($checkResult['message']);
return false;
}
use App\Module\GameItems\Validators\CraftRecipeValidator;
use App\Module\GameItems\Validators\CraftConsumeValidator;
use App\Module\GameItems\Validators\CraftConditionValidator;
// 验证配方是否存在且可用
[
'recipe_id', new CraftRecipeValidator($this, ['recipe']),
'msg' => '配方验证失败'
],
// 验证合成条件是否满足
[
'recipe_id', new CraftConditionValidator($this, ['user_id', 'recipe']),
'msg' => '合成条件不满足'
],
// 验证合成消耗是否充足
[
'recipe_id', new CraftConsumeValidator($this, ['user_id', 'quantity', 'recipe']),
'msg' => '合成消耗不足'
]
// 移除前:完整的Validation验证
$validation = new ItemCraftValidation([...]);
$validation->validated();
// 简化后:基础参数验证
if ($recipeId <= 0) {
throw new LogicException("配方ID无效");
}
ItemCraftValidation的引用app/Module/GameItems/Services/CraftService.php
app/Module/GameItems/Validations/ItemCraftValidation.php
app/Module/GameItems/Validators/CraftConsumeValidator.php (新增)
app/Module/GameItems/Validators/CraftConditionValidator.php (新增)
app/Module/AppGame/Handler/Item/CraftHandler.php
app/Module/GameItems/Validators/CraftMaterialsValidator.php (删除)
这次优化彻底移除了合成系统中旧版逻辑的残留,统一使用组系统进行验证,提高了代码的一致性、可维护性和性能。新的验证器设计更加模块化,便于后续的功能扩展和维护。