ForeachValidation.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace UCore\Validator;
  3. use UCore\ValidationCore;
  4. use UCore\Validator;
  5. /**
  6. * 数组遍历验证器
  7. *
  8. * 遍历数组中的每个元素,使用指定的Validation类进行验证
  9. */
  10. class ForeachValidation extends Validator
  11. {
  12. /**
  13. * 验证数组中的每个元素
  14. *
  15. * args[0] 验证器类名
  16. * args[1] 索引字段名(可选)
  17. *
  18. * @param mixed $values 要验证的数组
  19. * @param array $data 所有验证数据
  20. * @return bool 验证是否通过
  21. */
  22. public function validate(mixed $values, array $data): bool
  23. {
  24. $validationClass = $this->args[0];
  25. $indexField = $this->args[1] ?? '';
  26. foreach ($values as $index => $value) {
  27. if ($indexField) {
  28. $validationData = [
  29. $indexField => $value
  30. ];
  31. } else {
  32. $validationData = $value;
  33. }
  34. /**
  35. * @var ValidationCore $validation
  36. */
  37. $validation = new $validationClass($validationData);
  38. $validation->validate();
  39. if ($validation->isFail()) {
  40. $errorMessage = $validation->firstError();
  41. $this->addError("索引 {$index} 的数据验证失败: {$errorMessage}");
  42. return false;
  43. }
  44. }
  45. return true;
  46. }
  47. }