public function exportJson($class = null)
{
$apis = array();
// 导出hook信息
foreach ($this->router->getHooks() as $hooks) {
foreach ($hooks as $method => $hook) {
$entries = $hook->export();
foreach ($entries as $entry) {
list($uri, $invoker) = $entry;
if ($class && $class != $invoker->getClassName()) {
continue;
}
$info['type'] = 'hook';
$info['uri'] = array($method, $uri);
$info = array_merge($info, $this->getInvokerInfo($method, $uri, $invoker));
$apis[$invoker->getClassName()]['apis'][] = $info;
}
}
}
// 导出api信息
foreach ($this->router->getRoutes() as $method => $route) {
$entries = $route->export();
foreach ($entries as $entry) {
list($uri, $invoker) = $entry;
if ($class && $class != $invoker->getClassName()) {
continue;
}
$info['type'] = 'api';
$info['uri'] = array($method, $uri);
$info = array_merge($info, $this->getInvokerInfo($method, $uri, $invoker));
$apis[$invoker->getClassName()]['apis'][] = $info;
}
}
foreach ($apis as $class_name => &$info) {
$ann = new \ReflectionClass($class_name);
$apis[$class_name]['doc'] = $this->getDocText($ann->getDocComment());
//排序, 便于阅读
usort($info['apis'], function ($lh, $rh) {
return strcmp($rh['uri'][1] . $rh['uri'][0], $lh['uri'][1] . $lh['uri'][0]);
});
}
return $apis;
}