Coder Social home page Coder Social logo

api-docs's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

api-docs's Issues

【BUG】前端传null值时DTO解析失败,程序报错

dto

<?php


namespace App\Dto\Admin\Carousel;


use App\Dto\BaseDto;
use Hyperf\ApiDocs\Annotation\ApiModelProperty;
use Hyperf\DTO\Annotation\Validation\Validation;

class CarouselUpdateDto extends BaseDto {

    #[ApiModelProperty('分类')]
    public $category_id;

    #[ApiModelProperty('图片')]
    #[Validation('array')]
    public $imgs;

    #[ApiModelProperty('链接类型')]
    public $type;

    #[ApiModelProperty('链接')]
    public $link;

    #[ApiModelProperty('启用状态')]
    public $enable;

    #[ApiModelProperty('排序值')]
    public $sort;
}

数据

{"carousel_id":1,"category_id":8,"imgs":[{"filename":"uploadlib-.png","type":"image","url":"http://127.0.0.1:9601/res-lib/upload/uploadlib-1653622489404.20221123143058.png","preview_url":"http://127.0.0.1:9601/res-lib/upload/uploadlib-1653622489404.20221123143058.png"}],"type":"none","link":null,"enable":1,"sort":1,"created_at":"2023-01-13 16:39:51","updated_at":"2023-01-13 17:55:31","deleted_at":null}

错误日志

Fatal error: Uncaught JsonMapper_Exception: JSON property "link" in class "App\Dto\Admin\Carousel\CarouselUpdateDto" must not be NULL in /data/www/hyperf-admin/vendor/netresearch/jsonmapper/src/JsonMapper.php:216
Stack trace:
#0 /data/www/hyperf-admin/vendor/tangwei/dto/src/Mapper.php(17): JsonMapper->map(Array, Object(App\Dto\Admin\Carousel\CarouselUpdateDto))
#1 /data/www/hyperf-admin/vendor/tangwei/dto/src/Middleware/CoreMiddleware.php(119): Hyperf\DTO\Mapper::map(Array, Object(App\Dto\Admin\Carousel\CarouselUpdateDto))
#2 /data/www/hyperf-admin/vendor/tangwei/dto/src/Middleware/CoreMiddleware.php(72): Hyperf\DTO\Middleware\CoreMiddleware->validateAndMap('App\\Controller\\...', 'dto', 'App\\Dto\\Admin\\C...', Object(App\Dto\Admin\Carousel\CarouselUpdateDto))
#3 /data/www/hyperf-admin/vendor/tangwei/dto/src/Middleware/CoreMiddleware.php(25): Hyperf\DTO\Middleware\CoreMiddleware->getInjections(Array, 'App\\Controller\\...', Array)
#4 /data/www/hyperf-admin/vendor/hyperf/http-server/src/CoreMiddleware.php(160): Hyperf\DTO\Middleware\CoreMiddleware->parseMethodParameters('App\\Controller\\...', 'update', Array)
#5 /data/www/hyperf-admin/vendor/hyperf/http-server/src/CoreMiddleware.php(113): Hyperf\HttpServer\CoreMiddleware->handleFound(Object(Hyperf\HttpServer\Router\Dispatched), Object(Hyperf\HttpMessage\Server\Request))
#6 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Hyperf\HttpServer\CoreMiddleware->process(Object(Hyperf\HttpMessage\Server\Request), Object(Hyperf\Dispatcher\HttpRequestHandler))
#7 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest(Object(Hyperf\HttpMessage\Server\Request))
#8 /data/www/hyperf-admin/runtime/container/proxy/App_Core_RBAC_Middleware_RBACMiddleware.proxy.php(49): Hyperf\Dispatcher\HttpRequestHandler->handle(Object(Hyperf\HttpMessage\Server\Request))
#9 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Core\RBAC\Middleware\RBACMiddleware->process(Object(Hyperf\HttpMessage\Server\Request), Object(Hyperf\Dispatcher\HttpRequestHandler))
#10 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest(Object(Hyperf\HttpMessage\Server\Request))
#11 /data/www/hyperf-admin/app/Core/Auth/Aspect/AuthMiddlewareAspect.php(45): Hyperf\Dispatcher\HttpRequestHandler->handle(Object(Hyperf\HttpMessage\Server\Request))
#12 /data/www/hyperf-admin/vendor/hyperf/di/src/Aop/Pipeline.php(30): App\Core\Auth\Aspect\AuthMiddlewareAspect->process(Object(Hyperf\Di\Aop\ProceedingJoinPoint))
#13 /data/www/hyperf-admin/vendor/hyperf/utils/src/Pipeline.php(95): Hyperf\Di\Aop\Pipeline->Hyperf\Di\Aop\{closure}(Object(Hyperf\Di\Aop\ProceedingJoinPoint))
#14 /data/www/hyperf-admin/vendor/hyperf/di/src/Aop/ProxyTrait.php(86): Hyperf\Utils\Pipeline->then(Object(Closure))
#15 /data/www/hyperf-admin/vendor/hyperf/di/src/Aop/ProxyTrait.php(29): Qbhy\HyperfAuth\AuthMiddleware::handleAround(Object(Hyperf\Di\Aop\ProceedingJoinPoint))
#16 /data/www/hyperf-admin/runtime/container/proxy/Qbhy_HyperfAuth_AuthMiddleware.proxy.php(49): Qbhy\HyperfAuth\AuthMiddleware::__proxyCall('Qbhy\\HyperfAuth...', 'process', Array, Object(Closure))
#17 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Qbhy\HyperfAuth\AuthMiddleware->process(Object(Hyperf\HttpMessage\Server\Request), Object(Hyperf\Dispatcher\HttpRequestHandler))
#18 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest(Object(Hyperf\HttpMessage\Server\Request))
#19 /data/www/hyperf-admin/vendor/hyperf/validation/src/Middleware/ValidationMiddleware.php(83): Hyperf\Dispatcher\HttpRequestHandler->handle(Object(Hyperf\HttpMessage\Server\Request))
#20 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): Hyperf\Validation\Middleware\ValidationMiddleware->process(Object(Hyperf\HttpMessage\Server\Request), Object(Hyperf\Dispatcher\HttpRequestHandler))
#21 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest(Object(Hyperf\HttpMessage\Server\Request))
#22 /data/www/hyperf-admin/runtime/container/proxy/App_Core_RespFmt_Middleware_RespFmtMiddleware.proxy.php(35): Hyperf\Dispatcher\HttpRequestHandler->handle(Object(Hyperf\HttpMessage\Server\Request))
#23 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Core\RespFmt\Middleware\RespFmtMiddleware->process(Object(Hyperf\HttpMessage\Server\Request), Object(Hyperf\Dispatcher\HttpRequestHandler))
#24 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest(Object(Hyperf\HttpMessage\Server\Request))
#25 /data/www/hyperf-admin/runtime/container/proxy/App_Core_Utils_Middleware_LanguageMiddleware.proxy.php(30): Hyperf\Dispatcher\HttpRequestHandler->handle(Object(Hyperf\HttpMessage\Server\Request))
#26 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Core\Utils\Middleware\LanguageMiddleware->process(Object(Hyperf\HttpMessage\Server\Request), Object(Hyperf\Dispatcher\HttpRequestHandler))
#27 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest(Object(Hyperf\HttpMessage\Server\Request))
#28 /data/www/hyperf-admin/app/Core/Utils/Middleware/CorsMiddleware.php(32): Hyperf\Dispatcher\HttpRequestHandler->handle(Object(Hyperf\HttpMessage\Server\Request))
#29 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/AbstractRequestHandler.php(64): App\Core\Utils\Middleware\CorsMiddleware->process(Object(Hyperf\HttpMessage\Server\Request), Object(Hyperf\Dispatcher\HttpRequestHandler))
#30 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/HttpRequestHandler.php(26): Hyperf\Dispatcher\AbstractRequestHandler->handleRequest(Object(Hyperf\HttpMessage\Server\Request))
#31 /data/www/hyperf-admin/vendor/hyperf/dispatcher/src/HttpDispatcher.php(40): Hyperf\Dispatcher\HttpRequestHandler->handle(Object(Hyperf\HttpMessage\Server\Request))
#32 /data/www/hyperf-admin/vendor/hyperf/http-server/src/Server.php(117): Hyperf\Dispatcher\HttpDispatcher->dispatch(Object(Hyperf\HttpMessage\Server\Request), Array, Object(Hyperf\DTO\Middleware\CoreMiddleware))
#33 {main}
  thrown in /data/www/hyperf-admin/vendor/netresearch/jsonmapper/src/JsonMapper.php on line 216
[2023-01-13 18:06:29 *1265.0]   WARNING Channel::~Channel() (ERRNO 10003): channel is destroyed, 2 consumers will be discarded
PHP Fatal error:  Uncaught Swoole\Error: API must be called in the coroutine in /data/www/hyperf-admin

能否支持下划线驼峰互转的传参与返回

有些时候后端接口对外定义的传参/返回都是下划线命名风格,但是类成员变量通常是推荐驼峰命名方式的,那么必然就存在一个传参下换线,转换成驼峰的场景;以及在返回时,将驼峰命名的转换成下划线

能否将JSONField的这个info日志注掉或者变更为debug级别的?

能否将JSONField的这个info日志注掉或者变更为debug级别的?
当我定义个一个从头获取参数的类,Header中的名称和我实际要的属性名不一致,所以使用JSONField来设定别名。
#[JSONField('x-webhook-sender')] public string $sender;
但是,当我在请求头中带回来的比如UserAgent等参数,确实不需要,但是会报出一堆info日志。。。

[2023-08-01 13:11:40] [INFO] Property {property} does not exist in {class}
[2023-08-01 13:11:40] [INFO] Property {property} does not exist in {class}
[2023-08-01 13:11:40] [INFO] Property {property} does not exist in {class}
[2023-08-01 13:11:40] [INFO] Property {property} does not exist in {class}
[2023-08-01 13:11:40] [INFO] Property {property} does not exist in {class}
[2023-08-01 13:11:40] [INFO] Property {property} does not exist in {class}
[2023-08-01 13:11:40] [INFO] Property {property} does not exist in {class}
.....

2.0版本发布配置文件报错

php bin/hyperf.php vendor:publish tangwei/apidocs
2.0版本报错下面的是什么轻快
There are no commands defined in the "vendor" namespace.

DTO能否继承?

能否像java 的 dto 一样使用继承。
多个api, 都有相同的参数,把相同参数提取成超类; 然后注解验证,同时也能生成swagger 文档后也会包含父类的属性参数。

api_docs修改enable启动后

修改了此配置后
return [
// enable false 将不会启动 swagger 服务
'enable' => false,
'format' => 'json',
...
];
修改了以上配置 然后启动就报错了

报错:
Fatal error: Uncaught Error: Typed static property Hyperf\ApiDocs\Listener\BootAppRouteListener::$massage must not be accessed before initialization in /cygdrive/f/xycphp/php8/lsk-

securitySchemes中使用type = http时 无法使用schema属性

配置如下
image

报错如下

PHP Fatal error:  Uncaught Error: Call to undefined method phpDocumentor\Reflection\DocBlock\Tags\See::getType() in /data/www/hyperf-admin/vendor/tangwei/dto/src/JsonMapper.php:177
Stack trace:
#0 /data/www/hyperf-admin/vendor/tangwei/dto/src/JsonMapper.php(100): Hyperf\DTO\JsonMapper->parseAnnotationsNew(Object(ReflectionClass), Object(ReflectionProperty), '/**\n     * The ...')
#1 /data/www/hyperf-admin/vendor/netresearch/jsonmapper/src/JsonMapper.php(167): Hyperf\DTO\JsonMapper->inspectProperty(Object(ReflectionClass), 'scheme')
#2 /data/www/hyperf-admin/vendor/tangwei/dto/src/Mapper.php(17): JsonMapper->map(Array, Object(OpenApi\Attributes\SecurityScheme))
#3 /data/www/hyperf-admin/vendor/tangwei/apidocs/src/Swagger/SwaggerOpenApi.php(104): Hyperf\DTO\Mapper::map(Array, Object(OpenApi\Attributes\SecurityScheme))
#4 /data/www/hyperf-admin/vendor/tangwei/apidocs/src/Swagger/SwaggerOpenApi.php(43): Hyperf\ApiDocs\Swagger\SwaggerOpenApi->setComponentsSecuritySchemes()
#5 /data/www/hyperf-admin/vendor/tangwei/apidocs/src/Listener/AfterDtoStartListener.php(52): Hyperf\ApiDocs\Swagger\SwaggerOpenApi->init()
#6 /data/www/hyperf-admin/vendor/hyperf/event/src/EventDispatcher.php(48): Hyperf\ApiDocs\Listener\AfterDtoStartListener->process(Object(Hyperf\DTO\Event\AfterDtoStart))
#7 /data/www/hyperf-admin/vendor/tangwei/dto/src/BeforeServerListener.php(63): Hyperf\Event\EventDispatcher->dispatch(Object(Hyperf\DTO\Event\AfterDtoStart))
#8 /data/www/hyperf-admin/vendor/hyperf/event/src/EventDispatcher.php(48): Hyperf\DTO\BeforeServerListener->process(Object(Hyperf\Framework\Event\BeforeServerStart))
#9 /data/www/hyperf-admin/vendor/hyperf/server/src/Server.php(131): Hyperf\Event\EventDispatcher->dispatch(Object(Hyperf\Framework\Event\BeforeServerStart))
#10 /data/www/hyperf-admin/vendor/hyperf/server/src/Server.php(72): Hyperf\Server\Server->initServers(Object(Hyperf\Server\ServerConfig))
#11 /data/www/hyperf-admin/vendor/hyperf/server/src/ServerFactory.php(56): Hyperf\Server\Server->init(Object(Hyperf\Server\ServerConfig))
#12 /data/www/hyperf-admin/vendor/hyperf/server/src/Command/StartServer.php(52): Hyperf\Server\ServerFactory->configure(Array)
#13 /data/www/hyperf-admin/vendor/symfony/console/Command/Command.php(298): Hyperf\Server\Command\StartServer->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#14 /data/www/hyperf-admin/vendor/symfony/console/Application.php(1042): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#15 /data/www/hyperf-admin/vendor/symfony/console/Application.php(299): Symfony\Component\Console\Application->doRunCommand(Object(Hyperf\Server\Command\StartServer), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#16 /data/www/hyperf-admin/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#17 /data/www/hyperf-admin/bin/hyperf.php(23): Symfony\Component\Console\Application->run()
#18 /data/www/hyperf-admin/bin/hyperf.php(24): {closure}()
#19 /data/www/hyperf-admin/vendor/hyperf/watcher/watcher.php(22): require_once('/data/www/hyper...')
#20 {main}
  thrown in /data/www/hyperf-admin/vendor/tangwei/dto/src/JsonMapper.php on line 177

Fatal error: Uncaught Error: Call to undefined method phpDocumentor\Reflection\DocBlock\Tags\See::getType() in /data/www/hyperf-admin/vendor/tangwei/dto/src/JsonMapper.php:177
Stack trace:
#0 /data/www/hyperf-admin/vendor/tangwei/dto/src/JsonMapper.php(100): Hyperf\DTO\JsonMapper->parseAnnotationsNew(Object(ReflectionClass), Object(ReflectionProperty), '/**\n     * The ...')
#1 /data/www/hyperf-admin/vendor/netresearch/jsonmapper/src/JsonMapper.php(167): Hyperf\DTO\JsonMapper->inspectProperty(Object(ReflectionClass), 'scheme')
#2 /data/www/hyperf-admin/vendor/tangwei/dto/src/Mapper.php(17): JsonMapper->map(Array, Object(OpenApi\Attributes\SecurityScheme))
#3 /data/www/hyperf-admin/vendor/tangwei/apidocs/src/Swagger/SwaggerOpenApi.php(104): Hyperf\DTO\Mapper::map(Array, Object(OpenApi\Attributes\SecurityScheme))
#4 /data/www/hyperf-admin/vendor/tangwei/apidocs/src/Swagger/SwaggerOpenApi.php(43): Hyperf\ApiDocs\Swagger\SwaggerOpenApi->setComponentsSecuritySchemes()
#5 /data/www/hyperf-admin/vendor/tangwei/apidocs/src/Listener/AfterDtoStartListener.php(52): Hyperf\ApiDocs\Swagger\SwaggerOpenApi->init()
#6 /data/www/hyperf-admin/vendor/hyperf/event/src/EventDispatcher.php(48): Hyperf\ApiDocs\Listener\AfterDtoStartListener->process(Object(Hyperf\DTO\Event\AfterDtoStart))
#7 /data/www/hyperf-admin/vendor/tangwei/dto/src/BeforeServerListener.php(63): Hyperf\Event\EventDispatcher->dispatch(Object(Hyperf\DTO\Event\AfterDtoStart))
#8 /data/www/hyperf-admin/vendor/hyperf/event/src/EventDispatcher.php(48): Hyperf\DTO\BeforeServerListener->process(Object(Hyperf\Framework\Event\BeforeServerStart))
#9 /data/www/hyperf-admin/vendor/hyperf/server/src/Server.php(131): Hyperf\Event\EventDispatcher->dispatch(Object(Hyperf\Framework\Event\BeforeServerStart))
#10 /data/www/hyperf-admin/vendor/hyperf/server/src/Server.php(72): Hyperf\Server\Server->initServers(Object(Hyperf\Server\ServerConfig))
#11 /data/www/hyperf-admin/vendor/hyperf/server/src/ServerFactory.php(56): Hyperf\Server\Server->init(Object(Hyperf\Server\ServerConfig))
#12 /data/www/hyperf-admin/vendor/hyperf/server/src/Command/StartServer.php(52): Hyperf\Server\ServerFactory->configure(Array)
#13 /data/www/hyperf-admin/vendor/symfony/console/Command/Command.php(298): Hyperf\Server\Command\StartServer->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#14 /data/www/hyperf-admin/vendor/symfony/console/Application.php(1042): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#15 /data/www/hyperf-admin/vendor/symfony/console/Application.php(299): Symfony\Component\Console\Application->doRunCommand(Object(Hyperf\Server\Command\StartServer), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#16 /data/www/hyperf-admin/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#17 /data/www/hyperf-admin/bin/hyperf.php(23): Symfony\Component\Console\Application->run()
#18 /data/www/hyperf-admin/bin/hyperf.php(24): {closure}()
#19 /data/www/hyperf-admin/vendor/hyperf/watcher/watcher.php(22): require_once('/data/www/hyper...')
#20 {main}
  thrown in /data/www/hyperf-admin/vendor/tangwei/dto/src/JsonMapper.php on line 177
Stop server success.

我希望实现Bearer格式的token

同时使用 ApiHeader , RequestQuery 时,RequestQuery中对应数量字段在文档参数中会消失

环境: swow-skeketon: 3.0
swow: 1.0

#[ApiOperation(summary: '查询')]
    #[GetMapping(path: 'api')]
    #[ApiHeader(name: 'test', required: true, type: 'string')]
    #[ApiFormData(name: 'photo', required: true, type: 'file')]
    public function api(#[RequestQuery] #[Valid] DemoRequest $request): DemoResponse
    {
        $response = new DemoResponse();
        $response->setName('foo');
        $response->setUser((new User())->setName('bar'));
        $addressArr = [];
        for ($i = 2; $i--;) {
            $addressArr[] = (new Address())->setName('address');
        }
        $response->setAddressArr($addressArr);
        return $response;
    }

能否支持多模块拆分文档

项目文档都放在单个文档中使得文档过于庞大

能否在Api注解上增加模块名以生成不同的swagger配置文件(如果没有更优的方案的话)

实现下图的效果
image

需要在swagger-ui中配置urls
image

感谢🙏

数组字段验证

可否增加对数组字段的规则验证功能,如下验证field1 和field2

{
  "info": [
    {
      "field1": 1,
      "field2": "string"
    },
    {
      "field1": 2,
      "field2": "string2"
    }
  ]
}

可以支持hyperf 的 phar打包吗

我看源码 注解dto是每次启动都会删除缓存重新生成 在phar包内是无法删除文件的 能否有一个配置 开启后则不清除缓存注解适合用于phar的模式

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.