daodao97 / apidog

Api Watch Dog, Hyperf 框架的 Api参数校验 和 swagger 生成组件
MIT License
150 stars 29 forks source link

自定义server name,无法生该控制器的API文档 #47

Closed hanchikang closed 3 years ago

hanchikang commented 3 years ago
/**
 * @ApiServer(name="admin")
 * @ApiController(prefix="admin/passport", tag="授权登录", server="admin")
 * @Middleware(CorsMiddleware::class)
 */

测试,路由是生效的,但没有生成该控制器的API文档

看了一下代码,应该是只是生成了 http 的文档: $router = $container->get(DispatcherFactory::class)->getRouter('http');

改成这样就可以了,希望修复一下:

        /*$router = $container->get(DispatcherFactory::class)->getRouter('http');
        $data = $router->getData();*/
        $servers = $config->get('server.servers');
        if (count($servers) > 1 && !Str::contains($output, '{server}')) {
            $logger->warning('You have multiple serve, but your apidog.output_file not contains {server} var');
        }
        foreach ($servers as $server) {
            $router = $container->get(DispatcherFactory::class)->getRouter($server['name']);
            $data = $router->getData();
            $swagger = new SwaggerJson($server['name']);

            $ignore = $config->get('apidog.ignore', function ($controller, $action) {
                return false;
            });

            array_walk_recursive($data, function ($item) use ($swagger, $ignore) {
                if ($item instanceof Handler && !($item->callback instanceof \Closure)) {
                    [$controller, $action] = $this->prepareHandler($item->callback);
                    (!$ignore($controller, $action)) && $swagger->addPath($controller, $action);
                }
            });

            $swagger->save();
        }
daodao97 commented 3 years ago

已经在 PR#64 中修复, 将在 1.5.14 版本中发布.