mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 15:12:48 +08:00
App类的invokeMethod和invokeFunction方法变为public
并且bindParams方法支持按顺序绑定
This commit is contained in:
@@ -120,7 +120,7 @@ class App
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 执行函数或者闭包方法 支持参数调用
|
// 执行函数或者闭包方法 支持参数调用
|
||||||
private static function invokeFunction($function, $vars = [])
|
public static function invokeFunction($function, $vars = [])
|
||||||
{
|
{
|
||||||
$reflect = new \ReflectionFunction($function);
|
$reflect = new \ReflectionFunction($function);
|
||||||
$args = self::bindParams($reflect, $vars);
|
$args = self::bindParams($reflect, $vars);
|
||||||
@@ -130,7 +130,7 @@ class App
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 调用反射执行类的方法 支持参数绑定
|
// 调用反射执行类的方法 支持参数绑定
|
||||||
private static function invokeMethod($method, $vars = [])
|
public static function invokeMethod($method, $vars = [])
|
||||||
{
|
{
|
||||||
if (empty($vars)) {
|
if (empty($vars)) {
|
||||||
// 自动获取请求变量
|
// 自动获取请求变量
|
||||||
@@ -162,11 +162,16 @@ class App
|
|||||||
private static function bindParams($reflect, $vars)
|
private static function bindParams($reflect, $vars)
|
||||||
{
|
{
|
||||||
$args = [];
|
$args = [];
|
||||||
|
// 判断数组类型 数字数组时按顺序绑定参数
|
||||||
|
$keys = array_keys($vars);
|
||||||
|
$type = array_keys($keys) === $keys ? 1 : 0;
|
||||||
if ($reflect->getNumberOfParameters() > 0) {
|
if ($reflect->getNumberOfParameters() > 0) {
|
||||||
$params = $reflect->getParameters();
|
$params = $reflect->getParameters();
|
||||||
foreach ($params as $param) {
|
foreach ($params as $param) {
|
||||||
$name = $param->getName();
|
$name = $param->getName();
|
||||||
if (isset($vars[$name])) {
|
if (1 == $type && !empty($vars)) {
|
||||||
|
$args[] = array_shift($vars);
|
||||||
|
} elseif (0 == $type && isset($vars[$name])) {
|
||||||
$args[] = $vars[$name];
|
$args[] = $vars[$name];
|
||||||
} elseif ($param->isDefaultValueAvailable()) {
|
} elseif ($param->isDefaultValueAvailable()) {
|
||||||
$args[] = $param->getDefaultValue();
|
$args[] = $param->getDefaultValue();
|
||||||
|
|||||||
@@ -357,13 +357,14 @@ class Loader
|
|||||||
$module = '.' != $info['dirname'] ? $info['dirname'] : CONTROLLER_NAME;
|
$module = '.' != $info['dirname'] ? $info['dirname'] : CONTROLLER_NAME;
|
||||||
$class = self::controller($module, $layer);
|
$class = self::controller($module, $layer);
|
||||||
if ($class) {
|
if ($class) {
|
||||||
if (is_string($vars)) {
|
if (is_scalar($vars)) {
|
||||||
parse_str($vars, $vars);
|
if (strpos($vars, '=')) {
|
||||||
|
parse_str($vars, $vars);
|
||||||
|
} else {
|
||||||
|
$vars = [$vars];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$method = new \ReflectionMethod($class, $action . Config::get('action_suffix'));
|
return App::invokeMethod([$class, $action . Config::get('action_suffix')], $vars);
|
||||||
// 记录执行信息
|
|
||||||
APP_DEBUG && Log::record('[ RUN ] ' . $method->getFileName(), 'info');
|
|
||||||
return $method->invokeArgs($class, $vars);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user