PetLevelUpValidator.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace App\Module\Pet\Validators;
  3. use App\Module\Pet\Enums\PetStatus;
  4. use App\Module\Pet\Models\PetLevelConfig;
  5. use App\Module\Pet\Models\PetUser;
  6. use UCore\Validator;
  7. /**
  8. * 宠物升级验证器
  9. *
  10. * 用于验证宠物升级条件的合法性
  11. */
  12. class PetLevelUpValidator extends Validator
  13. {
  14. /**
  15. * 验证方法
  16. *
  17. * @param mixed $value 宠物ID
  18. * @param array $data 所有数据
  19. * @return bool 验证是否通过
  20. */
  21. public function validate(mixed $value, array $data): bool
  22. {
  23. $petId = $value;
  24. try {
  25. // 获取宠物信息
  26. $pet = PetUser::find($petId);
  27. if (!$pet) {
  28. $this->addError('宠物不存在');
  29. return false;
  30. }
  31. // 检查宠物状态
  32. if ($pet->status !== PetStatus::NORMAL) {
  33. $this->addError('宠物当前状态(' . $pet->status->name . ')不允许升级');
  34. return false;
  35. }
  36. // 获取当前等级配置
  37. $currentLevelConfig = PetLevelConfig::where('level', $pet->level)->first();
  38. if (!$currentLevelConfig) {
  39. $this->addError('宠物等级配置不存在');
  40. return false;
  41. }
  42. // 获取下一级配置
  43. $nextLevelConfig = PetLevelConfig::where('level', $pet->level + 1)->first();
  44. if (!$nextLevelConfig) {
  45. $this->addError('宠物已达到最大等级(' . $pet->level . ')');
  46. return false;
  47. }
  48. // 检查经验值是否足够
  49. if ($pet->experience < $nextLevelConfig->exp_required) {
  50. $this->addError('经验值不足,无法升级,当前(' . $pet->experience . '),需要(' . $nextLevelConfig->exp_required . ')');
  51. return false;
  52. }
  53. return true;
  54. } catch (\Exception $e) {
  55. $this->addError('验证过程发生错误: ' . $e->getMessage());
  56. return false;
  57. }
  58. }
  59. }