支持控制器的架构方法依赖注入

This commit is contained in:
thinkphp
2016-09-25 17:35:29 +08:00
parent e0491932b5
commit 0b7f0b0534
2 changed files with 23 additions and 2 deletions

View File

@@ -221,11 +221,32 @@ class App
$reflect = new \ReflectionMethod($method); $reflect = new \ReflectionMethod($method);
} }
$args = self::bindParams($reflect, $vars); $args = self::bindParams($reflect, $vars);
// 记录执行信息
self::$debug && Log::record('[ RUN ] ' . $reflect->__toString(), 'info'); self::$debug && Log::record('[ RUN ] ' . $reflect->__toString(), 'info');
return $reflect->invokeArgs(isset($class) ? $class : null, $args); return $reflect->invokeArgs(isset($class) ? $class : null, $args);
} }
/**
* 调用反射执行类的实例化 支持依赖注入
* @access public
* @param string $class 类名
* @param array $vars 变量
* @return mixed
*/
public static function invokeClass($class, $vars = [])
{
$reflect = new \ReflectionClass($class);
$constructor = $reflect->getConstructor();
if ($constructor) {
$args = self::bindParams($constructor, $vars);
} else {
$args[] = Request::instance();
}
self::$debug && Log::record('[ RUN ] ' . $reflect->__toString(), 'info');
return $reflect->newInstanceArgs($args);
}
/** /**
* 绑定参数 * 绑定参数
* @access public * @access public

View File

@@ -406,7 +406,7 @@ class Loader
} }
$class = self::parseClass($module, $layer, $name, $appendSuffix); $class = self::parseClass($module, $layer, $name, $appendSuffix);
if (class_exists($class)) { if (class_exists($class)) {
return new $class(Request::instance()); return App::invokeClass($class);
} elseif ($empty && class_exists($emptyClass = self::parseClass($module, $layer, $empty, $appendSuffix))) { } elseif ($empty && class_exists($emptyClass = self::parseClass($module, $layer, $empty, $appendSuffix))) {
return new $emptyClass(Request::instance()); return new $emptyClass(Request::instance());
} }