['class' => RequiredValidatorFilter::class], 'length' => ['class' => LengthValidatorFilter::class], 'minLength' => ['class' => MinLengthValidatorFilter::class], 'maxLength' => ['class' => MaxLengthValidatorFilter::class], 'in' => ['class' => InValidatorFilter::class], 'notIn' => ['class' => NotInValidatorFilter::class], 'between' => ['class' => BetweenValidatorFilter::class], 'notBetween' => ['class' => NotBetweenValidatorFilter::class], 'max' => ['class' => MaxValidatorFilter::class], 'min' => ['class' => MinValidatorFilter::class], 'round' => ['class' => RoundValidatorFilter::class], 'must' => ['class' => MustValidatorFilter::class], 'email' => ['class' => EmailValidatorFilter::class], 'phone' => ['class' => PhoneValidatorFilter::class], ]; /** * @param string $field * @param array $rules * @param mixed $defaultValue */ public function __construct(public string $field, public array $rules, public mixed $defaultValue = null) { } /** * @param object $class * @param string $property * @return array */ public function dispatch(object $class, string $property): array { // TODO: Implement dispatch() method. $array = []; if (count($this->rules) < 1) { return $array; } foreach ($this->rules as $key => $rule) { if (is_string($key)) { $array[] = $this->getValidator($key, $rule); } else if (method_exists($this, $rule)) { $array[] = [$class, $rule, false]; } else { $array[] = $this->getValidator($key, $rule); } } if (!is_null($this->defaultValue)) { $class->{$property} = $this->defaultValue; } return $array; } /** * @param $key * @param $rule * @return array * @throws */ protected function getValidator($key, $rule): array { if (is_numeric($key)) { $class = self::TYPES[$rule]; } else { $class = array_merge(self::TYPES[$key], ['value' => $rule, 'field' => $key]); } $isFirst = false; if ($class['class'] === RequiredValidatorFilter::class) { $isFirst = true; } return [Kiri::createObject($class), 'dispatch', $isFirst]; } }