Bläddra i källkod

Check for nested fields properly when writing OAS

shalvah 4 år sedan
förälder
incheckning
be69987aa4
2 ändrade filer med 17 tillägg och 15 borttagningar
  1. 1 1
      src/Extracting/Generator.php
  2. 16 14
      src/Writing/OpenAPISpecWriter.php

+ 1 - 1
src/Extracting/Generator.php

@@ -131,7 +131,7 @@ class Generator
         $parsedRoute['responseFields'] = $responseFields;
 
 
-        $parsedRoute['nestedBodyParameters'] = $this->nestArrayAndObjectFields($parsedRoute['bodyParameters']);
+        $parsedRoute['nestedBodyParameters'] = self::nestArrayAndObjectFields($parsedRoute['bodyParameters']);
 
         self::$routeBeingProcessed = null;
 

+ 16 - 14
src/Writing/OpenAPISpecWriter.php

@@ -452,24 +452,26 @@ class OpenAPISpecWriter
                 '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'] ?? '',