【问题标题】:SwaggerDecorator not working after update API Platform to v2.3.5将 API 平台更新到 v2.3.5 后,SwaggerDecorator 无法正常工作
【发布时间】:2019-06-04 02:39:48
【问题描述】:

API平台升级后,文档中的装饰器已经停止工作:

https://api-platform.com/docs/core/swagger/#overriding-the-swagger-documentation

有谁知道这是否是一个变化,是一个错误吗?

我使用 Symfony 4.2.2(问题可能是由于 Symfony 更新)。

我的代码添加到招摇输入表单以更改上下文:

<?php
namespace App\Swagger;

use Symfony\Component\Serializer\Normalizer\NormalizerInterface;

final class SwaggerDecorator implements NormalizerInterface
{
    private $decorated;

    public function __construct(NormalizerInterface $decorated)
    {
        $this->decorated = $decorated;
    }

    public function normalize($object, $format = null, array $context = [])
    {
        $docs = $this->decorated->normalize($object, $format, $context);

        $customDefinition = [
            'name' => 'context',
            'definition' => 'Context field',
            'default' => '',
            'in' => 'query',
        ];


        // Add context parameter
        foreach ($docs['paths'] as $key => $value) {
            // e.g. add a custom parameter
            $customDefinition['default'] = lcfirst($docs['paths'][$key]['get']['tags'][0] ?? '');
            $docs['paths'][$key]['get']['parameters'][] = $customDefinition;
            if(isset($docs['paths'][$key]['post'])){
                $docs['paths'][$key]['post']['parameters'][] = $customDefinition;
            }

            if(isset($docs['paths'][$key]['put'])){
                $docs['paths'][$key]['put']['parameters'][] = $customDefinition;
            }

        }

        return $docs;
    }

    public function supportsNormalization($data, $format = null)
    {
        return $this->decorated->supportsNormalization($data, $format);
    }
}

【问题讨论】:

    标签: api-platform.com


    【解决方案1】:

    尝试在服务配置中使用参数“decoration_priority”(https://symfony.com/doc/current/service_container/service_decoration.html#decoration-priority

    例如:

    App\Swagger\SwaggerDecorator:
        decorates: 'api_platform.swagger.normalizer.documentation'
        arguments: [ '@App\Swagger\SwaggerDecorator.inner' ]
        decoration_priority: 1000
    

    或者修复 composer.json 中的 "symfony/dependency-injection": "4.2.1" 版本

    详情请见https://github.com/symfony/symfony/issues/29836

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多