HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/hz.xxlht.com1/vendor/alipay/lotusphp_runtime/Validator/Validator.php
<?php
class LtValidator
{
	public $configHandle;
	protected $errorMessages;

	public function __construct()
	{
		if (! $this->configHandle instanceof LtConfig)
		{
			if (class_exists("LtObjectUtil", false))
			{
				$this->configHandle = LtObjectUtil::singleton("LtConfig");
			}
			else
			{
				$this->configHandle = new LtConfig;
			}
		}
	}

	public function init()
	{
		$this->errorMessages = $this->configHandle->get('validator.error_messages');
	}

	/**
	 * Validate an element
	 * 
	 * @param mixed $value 
	 * @param array $dtd 
	 * @return array 
	 */
	public function validate($value, $dtd)
	{
		$errorMessages = array();
		$label = $dtd->label;

		if (is_array($dtd->rules) && count($dtd->rules))
		{
			$messages = isset($dtd->messages) ? $dtd->messages : array();
			foreach ($dtd->rules as $key => $val)
			{ 
				// callback_user_function
				if ('callback_' == substr($key, 0, 9))
				{
					$method = substr($key, 9); 
					// 定义了过程函数
					if (function_exists($method))
					{
						if (!$method($value, $dtd->rules[$key]))
						{
							if (isset($this->errorMessages[$key]))
							{
								$messages[$key] = $this->errorMessages[$key];
							}
							else
							{
								$messages[$key] = "validator.error_messages[$key] empty";
							}
							$errorMessages[$key] = sprintf($messages[$key], $label, $dtd->rules[$key]);
						}
						continue;
					} 
					// 定义了类方法
					$rc = new ReflectionClass($val);
					if ($rc->hasMethod($method))
					{
						$rcMethod = $rc->getMethod($method);
						if ($rcMethod->isStatic())
						{
							$ret = $rcMethod->invoke(null, $value, $dtd->rules[$key]);
						}
						else
						{ 
							// 非静态方法需要一个实例 有待考虑单例
							$rcInstance = $rc->newInstance();
							$ret = $rcMethod->invoke($rcInstance, $value, $dtd->rules[$key]);
						}
						if (!$ret)
						{
							if (isset($this->errorMessages[$key]))
							{
								$messages[$key] = $this->errorMessages[$key];
							}
							else
							{
								$messages[$key] = "validator.error_messages[$key] empty";
							}
							$errorMessages[$key] = sprintf($messages[$key], $label, $dtd->rules[$key]);
						}
						continue;
					}
					continue;
				} 
				// end callback_user_function
				$validateFunction = '_' . $key;
				if ((is_bool($dtd->rules[$key]) || 0 < strlen($dtd->rules[$key])) && !$this->$validateFunction($value, $dtd->rules[$key]))
				{
					if (empty($messages[$key]))
					{
						if (isset($this->errorMessages[$key]))
						{
							$messages[$key] = $this->errorMessages[$key];
						}
						else
						{
							$messages[$key] = "validator.error_messages[$key] empty";
						}
					}
					$errorMessages[$key] = sprintf($messages[$key], $label, $dtd->rules[$key]);
				}
			}
		}
		return $errorMessages;
	}

	protected function _ban($value, $ruleValue)
	{
		return !preg_match($ruleValue, $value);
	}

	protected function _mask($value, $ruleValue)
	{
		return preg_match($ruleValue, $value);
	}

	protected function _equal_to($value, $ruleValue)
	{
		return $value === $ruleValue;
	}

	protected function _max_length($value, $ruleValue)
	{
		return mb_strlen($value) <= $ruleValue;
	}

	protected function _min_length($value, $ruleValue)
	{
		return mb_strlen($value) >= $ruleValue;
	}

	protected function _max_value($value, $ruleValue)
	{
		return $value <= $ruleValue;
	}

	protected function _min_value($value, $ruleValue)
	{
		return $value >= $ruleValue;
	}

	protected function _min_selected($value, $ruleValue)
	{
		return count($value) >= $ruleValue;
	}

	protected function _max_selected($value, $ruleValue)
	{
		return count($value) <= $ruleValue;
	}

	protected function _required($value, $ruleValue)
	{
		if (false == $ruleValue)
		{
			return true;
		}
		else
		{
			return is_array($value) && count($value) || strlen($value);
		}
	}
}