Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

58 строки
1.5KB

  1. <?php
  2. namespace Framework\Validation;
  3. use Framework\Validation\Exception\ValidationException;
  4. use Framework\Validation\Rule\Rule;
  5. class Manager
  6. {
  7. protected array $rules = [];
  8. public function addRule(string $alias, Rule $rule): static
  9. {
  10. $this->rules[$alias] = $rule;
  11. return $this;
  12. }
  13. public function validate(array $data, array $rules, string $sessionName = 'errors'): array
  14. {
  15. $errors = [];
  16. foreach ($rules as $field => $rulesForField) {
  17. foreach ($rulesForField as $rule) {
  18. $name = $rule;
  19. $params = [];
  20. if (str_contains($rule, ':')) {
  21. [$name, $params] = explode(':', $rule);
  22. $params = explode(',', $params);
  23. }
  24. $processor = $this->rules[$name];
  25. if (!$processor->validate($data, $field, $params)) {
  26. if (!isset($errors[$field])) {
  27. $errors[$field] = [];
  28. }
  29. array_push($errors[$field], $processor->getMessage($data, $field, $params));
  30. }
  31. }
  32. }
  33. if (count($errors)) {
  34. $exception = new ValidationException();
  35. $exception->setErrors($errors);
  36. $exception->setSessionName($sessionName);
  37. throw $exception;
  38. } else {
  39. if ($session = session()) {
  40. $session->forget($sessionName);
  41. }
  42. }
  43. return array_intersect_key($data, $rules);
  44. }
  45. }

Powered by TurnKey Linux.