diff --git a/src/Extracting/Generator.php b/src/Extracting/Generator.php index 6e2cdfd8..4c25e596 100644 --- a/src/Extracting/Generator.php +++ b/src/Extracting/Generator.php @@ -131,7 +131,7 @@ public function processRoute(Route $route, array $routeRules = []) $parsedRoute['responseFields'] = $responseFields; - $parsedRoute['nestedBodyParameters'] = $this->nestArrayAndObjectFields($parsedRoute['bodyParameters']); + $parsedRoute['nestedBodyParameters'] = self::nestArrayAndObjectFields($parsedRoute['bodyParameters']); self::$routeBeingProcessed = null; diff --git a/src/Writing/OpenAPISpecWriter.php b/src/Writing/OpenAPISpecWriter.php index 806132e1..a1184893 100644 --- a/src/Writing/OpenAPISpecWriter.php +++ b/src/Writing/OpenAPISpecWriter.php @@ -452,24 +452,26 @@ public function generateFieldData(array $field): array 'description' => $field['description'] ?? '', 'example' => $field['value'] ?? null, 'items' => Utils::isArrayType($baseType) - ? $this->generateFieldData(['name' => '', 'type' => $baseType, 'value' => ($field['value'] ?? [null])[0]]) - : [ - 'type' => $baseType, - ], - ]; + ? $this->generateFieldData([ + 'name' => '', + 'type' => $baseType, + 'value' => ($field['value'] ?? [null])[0], + ]) + : ['type' => $baseType], + ]; - if ($baseType === 'object') { - foreach ($field['fields'] as $subfield) { - $fieldSimpleName = preg_replace("/^{$field['name']}\\[\]\\./", '', $subfield['name']); - $fieldData['items']['properties'][$fieldSimpleName] = $this->generateFieldData($subfield); - if ($subfield['required']) { - $fieldData['items']['required'][] = $fieldSimpleName; + if ($baseType === 'object' && !empty($field['fields'])) { + foreach ($field['fields'] as $subfield) { + $fieldSimpleName = preg_replace("/^{$field['name']}\\[\]\\./", '', $subfield['name']); + $fieldData['items']['properties'][$fieldSimpleName] = $this->generateFieldData($subfield); + if ($subfield['required']) { + $fieldData['items']['required'][] = $fieldSimpleName; + } } } - } - return $fieldData; - } else if ($field['type'] === 'object') { + return $fieldData; + } else if ($field['type'] === 'object') { return [ 'type' => 'object', 'description' => $field['description'] ?? '',