diff --git a/src/OpenApi/Factory/OpenApiFactory.php b/src/OpenApi/Factory/OpenApiFactory.php index c976f011f25..69dfdf68382 100644 --- a/src/OpenApi/Factory/OpenApiFactory.php +++ b/src/OpenApi/Factory/OpenApiFactory.php @@ -27,6 +27,7 @@ use ApiPlatform\Core\Metadata\Resource\ResourceMetadata; use ApiPlatform\Core\OpenApi\Model; use ApiPlatform\Core\OpenApi\Model\ExternalDocumentation; +use ApiPlatform\Core\OpenApi\Model\PathItem; use ApiPlatform\Core\OpenApi\OpenApi; use ApiPlatform\Core\OpenApi\Options; use ApiPlatform\Core\Operation\Factory\SubresourceOperationFactoryInterface; @@ -144,6 +145,11 @@ private function collectPaths(ResourceMetadata $resourceMetadata, string $resour $resourceClass = $operation['resource_class'] ?? $rootResourceClass; $path = $this->getPath($resourceShortName, $operationName, $operation, $operationType); $method = $resourceMetadata->getTypedOperationAttribute($operationType, $operationName, 'method', 'GET'); + + if (!\in_array($method, PathItem::$methods, true)) { + continue; + } + [$requestMimeTypes, $responseMimeTypes] = $this->getMimeTypes($resourceClass, $operationName, $operationType, $resourceMetadata); $operationId = $operation['openapi_context']['operationId'] ?? lcfirst($operationName).ucfirst($resourceShortName).ucfirst($operationType); $linkedOperationId = 'get'.ucfirst($resourceShortName).ucfirst(OperationType::ITEM); diff --git a/src/OpenApi/Model/PathItem.php b/src/OpenApi/Model/PathItem.php index fae2c59a0ff..ddc4b057e0c 100644 --- a/src/OpenApi/Model/PathItem.php +++ b/src/OpenApi/Model/PathItem.php @@ -17,7 +17,7 @@ final class PathItem { use ExtensionTrait; - private static $methods = ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'HEAD', 'PATCH', 'TRACE']; + public static $methods = ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'HEAD', 'PATCH', 'TRACE']; private $ref; private $summary; private $description; diff --git a/tests/OpenApi/Factory/OpenApiFactoryTest.php b/tests/OpenApi/Factory/OpenApiFactoryTest.php index 021e8e2da9f..dca86f3dd97 100644 --- a/tests/OpenApi/Factory/OpenApiFactoryTest.php +++ b/tests/OpenApi/Factory/OpenApiFactoryTest.php @@ -118,6 +118,7 @@ public function testInvoke(): void ], ], ]] + self::OPERATION_FORMATS, + 'custom-http-verb' => ['method' => 'TEST'] + self::OPERATION_FORMATS, 'formats' => ['method' => 'PUT', 'path' => '/formatted/{id}', 'output_formats' => ['json' => ['application/json'], 'csv' => ['text/csv']], 'input_formats' => ['json' => ['application/json'], 'csv' => ['text/csv']]], ], [