@@ -86,14 +86,20 @@ private function addApiCommandParameters(array $schema, array $acquiaCloudSpec,
8686
8787 // Parameters to be used in the request body.
8888 if (array_key_exists ('requestBody ' , $ schema )) {
89+ // Resolve $ref in requestBody if present.
90+ if (array_key_exists ('$ref ' , $ schema ['requestBody ' ])) {
91+ $ parts = explode ('/ ' , $ schema ['requestBody ' ]['$ref ' ]);
92+ $ paramKey = end ($ parts );
93+ $ schema ['requestBody ' ] = $ acquiaCloudSpec ['components ' ]['requestBodies ' ][$ paramKey ];
94+ }
8995 [
9096 $ bodyInputDefinition ,
9197 $ requestBodyParamUsageSuffix ,
9298 ] = $ this ->addApiCommandParametersForRequestBody ($ schema , $ acquiaCloudSpec );
9399 $ requestBodySchema = $ this ->getRequestBodyFromParameterSchema ($ schema , $ acquiaCloudSpec );
94100 /** @var \Symfony\Component\Console\Input\InputOption|InputArgument $parameterDefinition */
95101 foreach ($ bodyInputDefinition as $ parameterDefinition ) {
96- $ parameterSpecification = $ this ->getPropertySpecFromRequestBodyParam ($ requestBodySchema , $ parameterDefinition );
102+ $ parameterSpecification = $ this ->getPropertySpecFromRequestBodyParam ($ requestBodySchema , $ parameterDefinition, $ acquiaCloudSpec );
97103 $ command ->addPostParameter ($ parameterDefinition ->getName (), $ parameterSpecification );
98104 }
99105 $ usage .= $ requestBodyParamUsageSuffix ;
@@ -125,6 +131,12 @@ private function addApiCommandParametersForRequestBody(array $schema, array $acq
125131 $ requestBodySchema ['properties ' ] = [];
126132 }
127133 foreach ($ requestBodySchema ['properties ' ] as $ propKey => $ paramDefinition ) {
134+ // Resolve $ref inside individual property definitions.
135+ if (array_key_exists ('$ref ' , $ paramDefinition )) {
136+ $ parts = explode ('/ ' , $ paramDefinition ['$ref ' ]);
137+ $ paramKey = end ($ parts );
138+ $ paramDefinition = $ this ->getParameterSchemaFromSpec ($ paramKey , $ acquiaCloudSpec );
139+ }
128140 $ isRequired = array_key_exists ('required ' , $ requestBodySchema ) && in_array ($ propKey , $ requestBodySchema ['required ' ], true );
129141 $ propKey = self ::renameParameter ($ propKey );
130142
@@ -168,9 +180,17 @@ private function addApiCommandParametersForRequestBody(array $schema, array $acq
168180 private function addPostArgumentUsageToExample (mixed $ requestBody , mixed $ propKey , mixed $ paramDefinition , string $ type , string $ usage , array $ acquiaCloudSpec ): string
169181 {
170182 $ requestBodyContent = $ this ->getRequestBodyContent ($ requestBody , $ acquiaCloudSpec );
171-
183+ // Example may live directly on the content-type object (inline requestBody),
184+ // or nested inside schema (e.g. $ref-resolved requestBodies).
172185 if (array_key_exists ('example ' , $ requestBodyContent )) {
173186 $ example = $ requestBodyContent ['example ' ];
187+ } elseif (array_key_exists ('schema ' , $ requestBodyContent ) && array_key_exists ('example ' , $ requestBodyContent ['schema ' ])) {
188+ $ example = $ requestBodyContent ['schema ' ]['example ' ];
189+ } else {
190+ return $ usage ;
191+ }
192+
193+ if ($ example ) {
174194 $ prefix = $ type === 'argument ' ? '' : "-- $ propKey= " ;
175195 if (array_key_exists ($ propKey , $ example )) {
176196 if (!array_key_exists ('type ' , $ paramDefinition )) {
@@ -482,10 +502,20 @@ private function getRequestBodyFromParameterSchema(array $schema, array $acquiaC
482502 return $ requestBodySchema ;
483503 }
484504
485- private function getPropertySpecFromRequestBodyParam (array $ requestBodySchema , mixed $ parameterDefinition ): mixed
505+ private function getPropertySpecFromRequestBodyParam (array $ requestBodySchema , mixed $ parameterDefinition, array $ acquiaCloudSpec = [] ): mixed
486506 {
487507 $ name = self ::restoreRenamedParameter ($ parameterDefinition ->getName ());
488- return $ requestBodySchema ['properties ' ][$ name ] ?? null ;
508+ $ spec = $ requestBodySchema ['properties ' ][$ name ] ?? [];
509+
510+ // Resolve $ref in the property spec so downstream code (e.g. castParamType) always
511+ // receives a fully resolved spec with a 'type' key rather than a bare $ref object.
512+ if (array_key_exists ('$ref ' , $ spec )) {
513+ $ parts = explode ('/ ' , $ spec ['$ref ' ]);
514+ $ paramKey = end ($ parts );
515+ $ spec = $ this ->getParameterSchemaFromSpec ($ paramKey , $ acquiaCloudSpec );
516+ }
517+
518+ return $ spec ;
489519 }
490520
491521 /**
0 commit comments