|
@@ -19,87 +19,68 @@ use function \ForkBB\__;
|
|
|
|
|
|
class Validator
|
|
class Validator
|
|
{
|
|
{
|
|
- /**
|
|
|
|
- * Контейнер
|
|
|
|
- * @var Container
|
|
|
|
- */
|
|
|
|
- protected $c;
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* Массив валидаторов
|
|
* Массив валидаторов
|
|
- * @var array
|
|
|
|
*/
|
|
*/
|
|
- protected $validators;
|
|
|
|
|
|
+ protected array $validators;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Массив правил для текущей проверки данных
|
|
* Массив правил для текущей проверки данных
|
|
- * @var array
|
|
|
|
*/
|
|
*/
|
|
- protected $rules;
|
|
|
|
|
|
+ protected array $rules;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Массив результатов проверенных данных
|
|
* Массив результатов проверенных данных
|
|
- * @var array
|
|
|
|
*/
|
|
*/
|
|
- protected $result;
|
|
|
|
|
|
+ protected array $result;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Массив дополнительных аргументов для валидаторов и конкретных полей/правил
|
|
* Массив дополнительных аргументов для валидаторов и конкретных полей/правил
|
|
- * @var array
|
|
|
|
*/
|
|
*/
|
|
- protected $arguments;
|
|
|
|
|
|
+ protected array $arguments;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Массив сообщений об ошибках для конкретных полей/правил
|
|
* Массив сообщений об ошибках для конкретных полей/правил
|
|
- * @var array
|
|
|
|
*/
|
|
*/
|
|
- protected $messages;
|
|
|
|
|
|
+ protected array $messages;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Массив псевдонимов имен полей для вывода в ошибках
|
|
* Массив псевдонимов имен полей для вывода в ошибках
|
|
- * @var array
|
|
|
|
*/
|
|
*/
|
|
- protected $aliases;
|
|
|
|
|
|
+ protected array $aliases;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Массив ошибок валидации
|
|
* Массив ошибок валидации
|
|
- * @var array
|
|
|
|
*/
|
|
*/
|
|
- protected $errors;
|
|
|
|
|
|
+ protected array $errors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Массив имен полей для обработки
|
|
* Массив имен полей для обработки
|
|
- * @var array
|
|
|
|
*/
|
|
*/
|
|
- protected $fields;
|
|
|
|
|
|
+ protected array $fields;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Массив состояний проверки полей
|
|
* Массив состояний проверки полей
|
|
- * @var array
|
|
|
|
*/
|
|
*/
|
|
- protected $status;
|
|
|
|
|
|
+ protected array $status;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Массив входящих данных для обработки
|
|
* Массив входящих данных для обработки
|
|
- * @var array
|
|
|
|
*/
|
|
*/
|
|
- protected $raw;
|
|
|
|
|
|
+ protected ?array $raw;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Данные для текущей обработки
|
|
* Данные для текущей обработки
|
|
- * @var array
|
|
|
|
*/
|
|
*/
|
|
- protected $curData;
|
|
|
|
|
|
+ protected array $curData;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Флаг ошибки
|
|
* Флаг ошибки
|
|
- * @var ?bool
|
|
|
|
*/
|
|
*/
|
|
- protected $error;
|
|
|
|
|
|
+ protected ?bool $error = null;
|
|
|
|
|
|
- public function __construct(Container $container)
|
|
|
|
|
|
+ public function __construct(protected Container $c)
|
|
{
|
|
{
|
|
- $this->c = $container;
|
|
|
|
$this->reset();
|
|
$this->reset();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -286,7 +267,7 @@ class Validator
|
|
* Проверяет поле согласно заданным правилам
|
|
* Проверяет поле согласно заданным правилам
|
|
* Возвращает значение запрашиваемого поля
|
|
* Возвращает значение запрашиваемого поля
|
|
*/
|
|
*/
|
|
- public function __get(string $field) /* : mixed */
|
|
|
|
|
|
+ public function __get(string $field): mixed
|
|
{
|
|
{
|
|
if (isset($this->status[$field])) {
|
|
if (isset($this->status[$field])) {
|
|
return $this->result[$field];
|
|
return $this->result[$field];
|
|
@@ -320,7 +301,7 @@ class Validator
|
|
/**
|
|
/**
|
|
* Проверяет значение списком правил
|
|
* Проверяет значение списком правил
|
|
*/
|
|
*/
|
|
- protected function checkValue(/* mixed */ $value, array $rules, string $field) /* : mixed */
|
|
|
|
|
|
+ protected function checkValue(mixed $value, array $rules, string $field): mixed
|
|
{
|
|
{
|
|
foreach ($rules as $validator => $attr) {
|
|
foreach ($rules as $validator => $attr) {
|
|
// данные для обработчика ошибок
|
|
// данные для обработчика ошибок
|
|
@@ -346,7 +327,7 @@ class Validator
|
|
/**
|
|
/**
|
|
* Добавляет ошибку
|
|
* Добавляет ошибку
|
|
*/
|
|
*/
|
|
- public function addError(/* string|array|null */ $error, string $type = 'v'): void
|
|
|
|
|
|
+ public function addError(string|array|null $error, string $type = 'v'): void
|
|
{
|
|
{
|
|
if (empty($vars = \end($this->curData))) {
|
|
if (empty($vars = \end($this->curData))) {
|
|
throw new RuntimeException('The array of variables is empty');
|
|
throw new RuntimeException('The array of variables is empty');
|
|
@@ -386,7 +367,7 @@ class Validator
|
|
/**
|
|
/**
|
|
* Возвращает дополнительные аргументы
|
|
* Возвращает дополнительные аргументы
|
|
*/
|
|
*/
|
|
- protected function getArguments(string $field, string $rule) /* : mixed */
|
|
|
|
|
|
+ protected function getArguments(string $field, string $rule): mixed
|
|
{
|
|
{
|
|
return $this->arguments["{$field}.{$rule}"] ?? $this->arguments[$field] ?? null;
|
|
return $this->arguments["{$field}.{$rule}"] ?? $this->arguments[$field] ?? null;
|
|
}
|
|
}
|
|
@@ -461,7 +442,7 @@ class Validator
|
|
/**
|
|
/**
|
|
* Проверяет переменную на отсутсвие содержимого
|
|
* Проверяет переменную на отсутсвие содержимого
|
|
*/
|
|
*/
|
|
- public function noValue(/* mixed */ $value, bool $withArray = false): bool
|
|
|
|
|
|
+ public function noValue(mixed $value, bool $withArray = false): bool
|
|
{
|
|
{
|
|
if (null === $value) {
|
|
if (null === $value) {
|
|
return true;
|
|
return true;
|
|
@@ -484,7 +465,7 @@ class Validator
|
|
*
|
|
*
|
|
* @return mixed
|
|
* @return mixed
|
|
*/
|
|
*/
|
|
- protected function vAbsent(Validator $v, /* mixed */ $value, string $attr) /* : mixed */
|
|
|
|
|
|
+ protected function vAbsent(Validator $v, mixed $value, string $attr): mixed
|
|
{
|
|
{
|
|
if (null === $value) {
|
|
if (null === $value) {
|
|
if (isset($attr[0])) {
|
|
if (isset($attr[0])) {
|
|
@@ -497,7 +478,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vExist(Validator $v, /* mixed */ $value) /* : mixed */
|
|
|
|
|
|
+ protected function vExist(Validator $v, mixed $value): mixed
|
|
{
|
|
{
|
|
if (null === $value) {
|
|
if (null === $value) {
|
|
$this->addError('The :alias not exist');
|
|
$this->addError('The :alias not exist');
|
|
@@ -506,7 +487,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vRequired(Validator $v, /* mixed */ $value) /* : mixed */
|
|
|
|
|
|
+ protected function vRequired(Validator $v, mixed $value): mixed
|
|
{
|
|
{
|
|
if ($this->noValue($value, true)) {
|
|
if ($this->noValue($value, true)) {
|
|
$this->addError('The :alias is required');
|
|
$this->addError('The :alias is required');
|
|
@@ -517,7 +498,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vRequiredWith(Validator $v, /* mixed */ $value, string $attr) /* : mixed */
|
|
|
|
|
|
+ protected function vRequiredWith(Validator $v, mixed $value, string $attr): mixed
|
|
{
|
|
{
|
|
foreach (\explode(',', $attr) as $field) {
|
|
foreach (\explode(',', $attr) as $field) {
|
|
if (null !== $this->__get($field)) { // если есть хотя бы одно поле,
|
|
if (null !== $this->__get($field)) { // если есть хотя бы одно поле,
|
|
@@ -532,7 +513,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vString(Validator $v, /* mixed */ $value, string $attr): ?string
|
|
|
|
|
|
+ protected function vString(Validator $v, mixed $value, string $attr): ?string
|
|
{
|
|
{
|
|
if (\is_string($value)) {
|
|
if (\is_string($value)) {
|
|
if (isset($attr[0])) {
|
|
if (isset($attr[0])) {
|
|
@@ -584,7 +565,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vNumeric(Validator $v, /* mixed */ $value) /* : mixed */
|
|
|
|
|
|
+ protected function vNumeric(Validator $v, mixed $value): mixed
|
|
{
|
|
{
|
|
if (\is_numeric($value)) {
|
|
if (\is_numeric($value)) {
|
|
$value += 0;
|
|
$value += 0;
|
|
@@ -604,7 +585,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vInteger(Validator $v, /* mixed */ $value) /* : mixed */
|
|
|
|
|
|
+ protected function vInteger(Validator $v, mixed $value): mixed
|
|
{
|
|
{
|
|
if (
|
|
if (
|
|
\is_numeric($value)
|
|
\is_numeric($value)
|
|
@@ -627,7 +608,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vArray(Validator $v, $value, array $attr): ?array
|
|
|
|
|
|
+ protected function vArray(Validator $v, mixed $value, array $attr): ?array
|
|
{
|
|
{
|
|
if (
|
|
if (
|
|
null !== $value
|
|
null !== $value
|
|
@@ -691,7 +672,7 @@ class Validator
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vMin(Validator $v, /* mixed */ $value, string $attr) /* : mixed */
|
|
|
|
|
|
+ protected function vMin(Validator $v, mixed $value, string $attr): mixed
|
|
{
|
|
{
|
|
if (! \preg_match('%^(-?\d+)(\s*bytes)?$%i', $attr, $matches)) {
|
|
if (! \preg_match('%^(-?\d+)(\s*bytes)?$%i', $attr, $matches)) {
|
|
throw new InvalidArgumentException('Expected number in attribute');
|
|
throw new InvalidArgumentException('Expected number in attribute');
|
|
@@ -730,7 +711,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vMax(Validator $v, /* mixed */ $value, string $attr) /* : mixed */
|
|
|
|
|
|
+ protected function vMax(Validator $v, mixed $value, string $attr): mixed
|
|
{
|
|
{
|
|
if (! \preg_match('%^(-?\d+)(\s*bytes)?$%i', $attr, $matches)) {
|
|
if (! \preg_match('%^(-?\d+)(\s*bytes)?$%i', $attr, $matches)) {
|
|
throw new InvalidArgumentException('Expected number in attribute');
|
|
throw new InvalidArgumentException('Expected number in attribute');
|
|
@@ -785,7 +766,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vToken(Validator $v, /* mixed */ $value, string $attr, /* mixed */ $args): ?string
|
|
|
|
|
|
+ protected function vToken(Validator $v, mixed $value, string $attr, mixed $args): ?string
|
|
{
|
|
{
|
|
if (! \is_array($args)) {
|
|
if (! \is_array($args)) {
|
|
$args = [];
|
|
$args = [];
|
|
@@ -803,7 +784,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vCheckbox(Validator $v, /* mixed */ $value) /* : mixed */
|
|
|
|
|
|
+ protected function vCheckbox(Validator $v, mixed $value): mixed
|
|
{
|
|
{
|
|
if (null === $value) {
|
|
if (null === $value) {
|
|
$this->addError(null);
|
|
$this->addError(null);
|
|
@@ -820,7 +801,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vReferer(Validator $v, /* mixed */ $value, string $attr, /* mixed */ $args): string
|
|
|
|
|
|
+ protected function vReferer(Validator $v, mixed $value, string $attr, mixed $args): string
|
|
{
|
|
{
|
|
if (! \is_array($args)) {
|
|
if (! \is_array($args)) {
|
|
$args = [];
|
|
$args = [];
|
|
@@ -829,7 +810,7 @@ class Validator
|
|
return $this->c->Router->validate($value, $attr, $args);
|
|
return $this->c->Router->validate($value, $attr, $args);
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vSame(Validator $v, /* mixed */ $value, string $attr) /* : mixed */
|
|
|
|
|
|
+ protected function vSame(Validator $v, mixed $value, string $attr): mixed
|
|
{
|
|
{
|
|
if (
|
|
if (
|
|
$this->getStatus($attr)
|
|
$this->getStatus($attr)
|
|
@@ -857,7 +838,7 @@ class Validator
|
|
return $this->vRegex($v, $value, '%[^\x20][\x20][^\x20]%');
|
|
return $this->vRegex($v, $value, '%[^\x20][\x20][^\x20]%');
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vIn(Validator $v, /* mixed */ $value, /* string|array */ $attr) /* : mixed */
|
|
|
|
|
|
+ protected function vIn(Validator $v, mixed $value, string|array $attr): mixed
|
|
{
|
|
{
|
|
if (! \is_scalar($value)) {
|
|
if (! \is_scalar($value)) {
|
|
$value = null;
|
|
$value = null;
|
|
@@ -880,7 +861,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vNotIn(Validator $v, /* mixed */ $value, /* string|array */ $attr) /* : mixed */
|
|
|
|
|
|
+ protected function vNotIn(Validator $v, mixed $value, string|array $attr): mixed
|
|
{
|
|
{
|
|
if (! \is_scalar($value)) {
|
|
if (! \is_scalar($value)) {
|
|
$value = null;
|
|
$value = null;
|
|
@@ -904,7 +885,7 @@ class Validator
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- protected function vFile(Validator $v, /* mixed */ $value, string $attr) /* : mixed */
|
|
|
|
|
|
+ protected function vFile(Validator $v, mixed $value, string $attr): mixed
|
|
{
|
|
{
|
|
if ($this->noValue($value, true)) {
|
|
if ($this->noValue($value, true)) {
|
|
$this->addError(null);
|
|
$this->addError(null);
|
|
@@ -941,7 +922,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vImage(Validator $v, /* mixed */ $value, string $attr) /* : mixed */
|
|
|
|
|
|
+ protected function vImage(Validator $v, mixed $value, string $attr): mixed
|
|
{
|
|
{
|
|
$value = $this->vFile($v, $value, $attr);
|
|
$value = $this->vFile($v, $value, $attr);
|
|
|
|
|
|
@@ -965,7 +946,7 @@ class Validator
|
|
return $value;
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
|
|
- protected function vDate(Validator $v, /* mixed */ $value): ?string
|
|
|
|
|
|
+ protected function vDate(Validator $v, mixed $value): ?string
|
|
{
|
|
{
|
|
if ($this->noValue($value)) {
|
|
if ($this->noValue($value)) {
|
|
$value = null;
|
|
$value = null;
|