From f8dda361f2aecef3b8966f5d841c982d473b599a Mon Sep 17 00:00:00 2001 From: Cees van Egmond Date: Tue, 7 Oct 2025 09:31:17 +0200 Subject: [PATCH 1/4] fix: allow description and other fields to be override seperately --- src/Metadata/Extractor/YamlResourceExtractor.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Metadata/Extractor/YamlResourceExtractor.php b/src/Metadata/Extractor/YamlResourceExtractor.php index bc9861071b..25332c66bd 100644 --- a/src/Metadata/Extractor/YamlResourceExtractor.php +++ b/src/Metadata/Extractor/YamlResourceExtractor.php @@ -25,6 +25,7 @@ use ApiPlatform\OpenApi\Model\Operation as OpenApiOperation; use ApiPlatform\OpenApi\Model\Parameter; use ApiPlatform\OpenApi\Model\RequestBody; +use ApiPlatform\OpenApi\Model\Response; use ApiPlatform\State\OptionsInterface; use Symfony\Component\WebLink\Link; use Symfony\Component\Yaml\Exception\ParseException; @@ -235,6 +236,13 @@ private function buildOpenapi(array $resource): bool|OpenApiOperation|null 'externalDocs' => new ExternalDocumentation(description: $value['description'] ?? '', url: $value['url'] ?? ''), 'requestBody' => new RequestBody(description: $value['description'] ?? '', content: isset($value['content']) ? new \ArrayObject($value['content'] ?? []) : null, required: $value['required'] ?? false), 'callbacks' => new \ArrayObject($value ?? []), + 'responses' => array_map(fn (array $response): Response => + new Response( + description: $response['description'] ?? '', + headers: isset($response['headers']) ? new \ArrayObject($response['headers']) : null, + content: isset($response['content']) ? new \ArrayObject($response['content']) : null, + links: isset($response['links']) ? new \ArrayObject($response['links']) : null + ), $value), default => $value, }; @@ -268,6 +276,7 @@ private function buildOpenapi(array $resource): bool|OpenApiOperation|null $resource['openapi']['parameters'] = $parameters; } + return new OpenApiOperation(...$resource['openapi']); } From 0da66937bcbdaef8ff74cc83f0d116b3f265ac89 Mon Sep 17 00:00:00 2001 From: Cees van Egmond Date: Tue, 7 Oct 2025 09:42:35 +0200 Subject: [PATCH 2/4] chore: remove line --- src/Metadata/Extractor/YamlResourceExtractor.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Metadata/Extractor/YamlResourceExtractor.php b/src/Metadata/Extractor/YamlResourceExtractor.php index 25332c66bd..2733fc8d07 100644 --- a/src/Metadata/Extractor/YamlResourceExtractor.php +++ b/src/Metadata/Extractor/YamlResourceExtractor.php @@ -276,7 +276,6 @@ private function buildOpenapi(array $resource): bool|OpenApiOperation|null $resource['openapi']['parameters'] = $parameters; } - return new OpenApiOperation(...$resource['openapi']); } From 469e5ab2abf6ac8d103fa2fa7dc2f5284debb77f Mon Sep 17 00:00:00 2001 From: Cees van Egmond Date: Tue, 7 Oct 2025 09:50:51 +0200 Subject: [PATCH 3/4] chore: php-cs-fixer --- src/Metadata/Extractor/YamlResourceExtractor.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Metadata/Extractor/YamlResourceExtractor.php b/src/Metadata/Extractor/YamlResourceExtractor.php index 2733fc8d07..f5b07d5c28 100644 --- a/src/Metadata/Extractor/YamlResourceExtractor.php +++ b/src/Metadata/Extractor/YamlResourceExtractor.php @@ -236,13 +236,12 @@ private function buildOpenapi(array $resource): bool|OpenApiOperation|null 'externalDocs' => new ExternalDocumentation(description: $value['description'] ?? '', url: $value['url'] ?? ''), 'requestBody' => new RequestBody(description: $value['description'] ?? '', content: isset($value['content']) ? new \ArrayObject($value['content'] ?? []) : null, required: $value['required'] ?? false), 'callbacks' => new \ArrayObject($value ?? []), - 'responses' => array_map(fn (array $response): Response => - new Response( - description: $response['description'] ?? '', - headers: isset($response['headers']) ? new \ArrayObject($response['headers']) : null, - content: isset($response['content']) ? new \ArrayObject($response['content']) : null, - links: isset($response['links']) ? new \ArrayObject($response['links']) : null - ), $value), + 'responses' => array_map(fn (array $response): Response => new Response( + description: $response['description'] ?? '', + headers: isset($response['headers']) ? new \ArrayObject($response['headers']) : null, + content: isset($response['content']) ? new \ArrayObject($response['content']) : null, + links: isset($response['links']) ? new \ArrayObject($response['links']) : null + ), $value), default => $value, }; From 70fd0ec82e0476971509d34c48d82267ab78189f Mon Sep 17 00:00:00 2001 From: Cees van Egmond Date: Tue, 7 Oct 2025 23:27:32 +0200 Subject: [PATCH 4/4] feat: also add xml --- src/Metadata/Extractor/XmlResourceExtractor.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Metadata/Extractor/XmlResourceExtractor.php b/src/Metadata/Extractor/XmlResourceExtractor.php index faf3be7ca8..2455404454 100644 --- a/src/Metadata/Extractor/XmlResourceExtractor.php +++ b/src/Metadata/Extractor/XmlResourceExtractor.php @@ -25,6 +25,7 @@ use ApiPlatform\OpenApi\Model\Operation as OpenApiOperation; use ApiPlatform\OpenApi\Model\Parameter as OpenApiParameter; use ApiPlatform\OpenApi\Model\RequestBody; +use ApiPlatform\OpenApi\Model\Response; use ApiPlatform\State\OptionsInterface; use Symfony\Component\Config\Util\XmlUtils; use Symfony\Component\WebLink\Link; @@ -204,12 +205,12 @@ private function buildOpenapi(\SimpleXMLElement $resource): bool|OpenApiOperatio if (isset($openapi->responses->response)) { foreach ($openapi->responses->response as $response) { - $data['responses'][(string) $response->attributes()->status] = [ - 'description' => $this->phpize($response, 'description', 'string'), - 'content' => isset($response->content->values) ? $this->buildValues($response->content->values) : null, - 'headers' => isset($response->headers->values) ? $this->buildValues($response->headers->values) : null, - 'links' => isset($response->links->values) ? $this->buildValues($response->links->values) : null, - ]; + $data['responses'][(string) $response->attributes()->status] = new Response( + description: $this->phpize($response, 'description', 'string'), + content: isset($response->content->values) ? new \ArrayObject($this->buildValues($response->content->values)) : null, + headers: isset($response->headers->values) ? new \ArrayObject($this->buildValues($response->headers->values)) : null, + links: isset($response->links->values) ? new \ArrayObject($this->buildValues($response->links->values)) : null, + ); } }