PublicAction::getMethodInfo

  1. Bitrix24 API (v. 23.675.0)
  2. landing
  3. PublicAction
  4. getMethodInfo
  • Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/publicaction.php
  • Класс: BitrixLandingPublicAction
  • Вызов: PublicAction::getMethodInfo
static function getMethodInfo($action, $data = array())
{
	$info = array();

	// if action exist and is callable
	if ($action && mb_strpos($action, '::'))
	{
		$actionOriginal = $action;
		$action = self::getNamespacePublicClasses() . '\' . $action;
		if (is_callable(explode('::', $action)))
		{
			[$class, $method] = explode('::', $action);
			$info = array(
				'action' => $actionOriginal,
				'class' => $class,
				'method' => $method,
				'params_init' => array(),
				'params_missing' => array()
			);
			// parse func params
			$reflection = new ReflectionMethod($class, $method);
			$static = $reflection->getStaticVariables();
			$mixedParams = isset($static['mixedParams'])
							? $static['mixedParams']
							: [];
			foreach ($reflection->getParameters() as $param)
			{
				$name = $param->getName();
				if (isset($data[$name]))
				{
					if (!in_array($name, $mixedParams))
					{
						if (
							$param->isArray() &&
							!is_array($data[$name])
							||
							!$param->isArray() &&
							is_array($data[$name])

						)
						{
							throw new BitrixMainArgumentTypeException(
								$name
							);
						}
					}
					$info['params_init'][$name] = $data[$name];
				}
				elseif ($param->isDefaultValueAvailable())
				{
					$info['params_init'][$name] = $param->getDefaultValue();
				}
				else
				{
					$info['params_missing'][] = $name;
				}
			}
		}
	}

	return $info;
}

Добавить комментарий