ChestOpenValidation.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Module\GameItems\Validations;
  3. use App\Module\GameItems\Validators\ChestItemValidator;
  4. use App\Module\GameItems\Validators\ChestOwnershipValidator;
  5. use App\Module\GameItems\Validators\ChestConsumeValidator;
  6. use UCore\ValidationCore;
  7. /**
  8. * 宝箱开启验证类
  9. *
  10. * 用于验证宝箱开启操作的输入数据,包括用户ID、宝箱ID和实例ID
  11. */
  12. class ChestOpenValidation extends ValidationCore
  13. {
  14. /** @var \App\Module\GameItems\Models\Item|null 宝箱物品对象,由 ChestItemValidator 设置 */
  15. public ?\App\Module\GameItems\Models\Item $chest_item = null;
  16. /**
  17. * 验证规则
  18. *
  19. * @param array $rules 自定义规则
  20. * @return array
  21. */
  22. public function rules($rules = []): array
  23. {
  24. return [
  25. [
  26. 'user_id,item_id', 'required'
  27. ],
  28. [
  29. 'user_id,item_id', 'integer', 'min' => 1,
  30. 'msg' => '{attr}必须是大于0的整数'
  31. ],
  32. [
  33. 'instance_id', 'integer', 'min' => 0,
  34. 'msg' => '{attr}必须是大于等于0的整数'
  35. ],
  36. // 验证物品是否为宝箱类型
  37. [
  38. 'item_id', new ChestItemValidator($this, ['chest_item']),
  39. 'msg' => '物品验证失败'
  40. ],
  41. // 验证用户是否拥有该宝箱
  42. [
  43. 'item_id', new ChestOwnershipValidator($this, ['user_id', 'instance_id']),
  44. 'msg' => '宝箱不存在或不属于当前用户'
  45. ],
  46. // 验证开启消耗是否充足
  47. [
  48. 'item_id', new ChestConsumeValidator($this, ['user_id', 'quantity']),
  49. 'msg' => '开启消耗不足'
  50. ]
  51. ];
  52. }
  53. /**
  54. * 设置默认值
  55. *
  56. * @return array
  57. */
  58. public function default(): array
  59. {
  60. return [
  61. 'instance_id' => 0,
  62. 'quantity' => 1
  63. ];
  64. }
  65. }