- Модуль: 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;
}