From e4220f7753e636f87d6000532acbe60b28c36854 Mon Sep 17 00:00:00 2001 From: "Bear.Y" Date: Tue, 12 Mar 2024 23:18:15 +0800 Subject: [PATCH] Add support for enums in route parameter --- .../RequestEssentialsExtension.php | 8 ++++++-- .../RequestEssentialsExtensionTest.php | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Support/OperationExtensions/RequestEssentialsExtension.php b/src/Support/OperationExtensions/RequestEssentialsExtension.php index 983306a9..8e2284c9 100644 --- a/src/Support/OperationExtensions/RequestEssentialsExtension.php +++ b/src/Support/OperationExtensions/RequestEssentialsExtension.php @@ -204,9 +204,13 @@ private function getRoutePathParameters(Route $route, ?PhpDocNode $methodPhpDocN 'string' => new StringType(), 'bool' => new BooleanType(), ]; - $schemaType = $type ? ($schemaTypesMap[$type] ?? new IntegerType) : new StringType; - $isModelId = $type && ! isset($schemaTypesMap[$type]); + $isEnum = function_exists('enum_exists') && enum_exists($type); + $schemaType = $isEnum + ? $this->openApiTransformer->transform(new ObjectType($type)) + : ($type ? ($schemaTypesMap[$type] ?? new IntegerType) : new StringType); + + $isModelId = $type && !$isEnum && !isset($schemaTypesMap[$type]); if ($isModelId) { [$schemaType, $description] = $this->getModelIdTypeAndDescription($schemaType, $type, $paramName, $description, $route->bindingFields()[$paramName] ?? null); diff --git a/tests/Support/OperationExtensions/RequestEssentialsExtensionTest.php b/tests/Support/OperationExtensions/RequestEssentialsExtensionTest.php index e3049658..55155d38 100644 --- a/tests/Support/OperationExtensions/RequestEssentialsExtensionTest.php +++ b/tests/Support/OperationExtensions/RequestEssentialsExtensionTest.php @@ -1,6 +1,7 @@ toHaveKey('schema.$ref', '#/components/schemas/Status'); +}); +class EnumParameter_RequestEssentialsExtensionTest_Controller +{ + public function foo(Status $status) + { + } +}