PetStatusChangeValidator.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Module\Pet\Validators;
  3. use App\Module\Pet\Enums\PetStatus;
  4. use App\Module\Pet\Models\PetUser;
  5. use UCore\Validator;
  6. /**
  7. * 宠物状态变更验证器
  8. *
  9. * 用于验证宠物状态变更条件的合法性
  10. */
  11. class PetStatusChangeValidator extends Validator
  12. {
  13. /**
  14. * 验证方法
  15. *
  16. * @param mixed $value 宠物ID
  17. * @param array $data 所有数据
  18. * @return bool 验证是否通过
  19. */
  20. public function validate(mixed $value, array $data): bool
  21. {
  22. $petId = $value;
  23. $newStatus = $data['newStatus'] ?? null;
  24. if (!$newStatus instanceof PetStatus) {
  25. $this->addError('新状态无效');
  26. return false;
  27. }
  28. try {
  29. // 获取宠物信息
  30. $pet = PetUser::find($petId);
  31. if (!$pet) {
  32. $this->addError('宠物不存在');
  33. return false;
  34. }
  35. // 检查状态变更是否合法
  36. // 这里可以根据业务需求添加更多的状态变更规则
  37. // 例如:死亡状态的宠物不能变为其他状态
  38. if ($pet->status === PetStatus::DEAD && $newStatus !== PetStatus::DEAD) {
  39. $this->addError('死亡状态的宠物不能变更为其他状态');
  40. return false;
  41. }
  42. // 例如:战斗中的宠物不能直接变为训练中
  43. if ($pet->status === PetStatus::FIGHTING && $newStatus === PetStatus::TRAINING) {
  44. $this->addError('战斗中的宠物不能直接变更为训练中状态');
  45. return false;
  46. }
  47. return true;
  48. } catch (\Exception $e) {
  49. $this->addError('验证过程发生错误: ' . $e->getMessage());
  50. return false;
  51. }
  52. }
  53. }