AbstractValidator.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. namespace Src\Validator;
  3. abstract class AbstractValidator
  4. {
  5. //Наименование валидируемого поля
  6. protected string $field = '';
  7. //Значение валидируемого поля
  8. protected $value;
  9. //Дополнительные аргументы
  10. protected array $args = [];
  11. //Массив ключей для замены в строке с ошибкой
  12. protected array $messageKeys = [];
  13. //Базовое сообщение об ошибке
  14. protected string $message = '';
  15. public function __construct(string $fieldName, $value, $args = [], string $message = null)
  16. {
  17. $this->field = $fieldName;
  18. $this->value = $value;
  19. $this->args = $args;
  20. $this->message = $message ?? $this->message;
  21. $this->messageKeys = [
  22. ":value" => $this->value,
  23. ":field" => $this->field
  24. ];
  25. }
  26. //Если правило валидации не прошло, то возвращаем сообщение об ошибке
  27. public function validate()
  28. {
  29. if (!$this->rule())
  30. return $this->messageError();
  31. return true;
  32. }
  33. //Замена ключей на конкретные значения в сообщении об ошибке
  34. private function messageError(): string
  35. {
  36. foreach ($this->messageKeys as $key => $value) {
  37. $message = str_replace($key, (string)$value, $this->message);
  38. }
  39. return $message;
  40. }
  41. //Основное правило валидации. Его должны переопределить классы-потомки
  42. abstract public function rule(): bool;
  43. }