diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpNextgenClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpNextgenClientCodegen.java index 6f79932b56f..55c3cb95d10 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpNextgenClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpNextgenClientCodegen.java @@ -34,11 +34,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.EnumSet; -import java.util.List; -import java.util.Map; +import java.util.*; public class PhpNextgenClientCodegen extends AbstractPhpCodegen { @SuppressWarnings("hiding") @@ -189,16 +185,31 @@ public class PhpNextgenClientCodegen extends AbstractPhpCodegen { objs = super.postProcessOperationsWithModels(objs, allModels); OperationMap operations = objs.getOperations(); for (CodegenOperation operation : operations.getOperation()) { - if (operation.returnType == null) { - operation.vendorExtensions.putIfAbsent("x-php-return-type", "void"); - } else { - if (operation.returnProperty.isContainer) { // array or map - operation.vendorExtensions.putIfAbsent("x-php-return-type", "array"); - } else { - operation.vendorExtensions.putIfAbsent("x-php-return-type", operation.returnType); + Set phpReturnTypeOptions = new LinkedHashSet<>(); + Set docReturnTypeOptions = new LinkedHashSet<>(); + + for (CodegenResponse response : operation.responses) { + if (response.dataType != null) { + String returnType = response.dataType; + if (response.isArray || response.isMap) { + // PHP does not understand array type hinting so we strip it + // The phpdoc will still contain the array type hinting + returnType = "array"; + } + + phpReturnTypeOptions.add(returnType); + docReturnTypeOptions.add(response.dataType); } } + if (phpReturnTypeOptions.isEmpty()) { + operation.vendorExtensions.putIfAbsent("x-php-return-type", "void"); + operation.vendorExtensions.putIfAbsent("x-php-doc-return-type", "void"); + } else { + operation.vendorExtensions.putIfAbsent("x-php-return-type", String.join("|", phpReturnTypeOptions)); + operation.vendorExtensions.putIfAbsent("x-php-doc-return-type", String.join("|", docReturnTypeOptions)); + } + for (CodegenParameter param : operation.allParams) { if (param.isArray || param.isMap) { param.vendorExtensions.putIfAbsent("x-php-param-type", "array"); diff --git a/modules/openapi-generator/src/main/resources/php-nextgen/api.mustache b/modules/openapi-generator/src/main/resources/php-nextgen/api.mustache index 6110545eda6..c7edbaf2bdc 100644 --- a/modules/openapi-generator/src/main/resources/php-nextgen/api.mustache +++ b/modules/openapi-generator/src/main/resources/php-nextgen/api.mustache @@ -164,7 +164,7 @@ use {{invokerPackage}}\ObjectSerializer; * * @throws ApiException on non-2xx response or if the response body is not in the expected format * @throws InvalidArgumentException - * @return {{#returnType}}{{#responses}}{{#dataType}}{{^-first}}|{{/-first}}{{/dataType}}{{{dataType}}}{{/responses}}{{/returnType}}{{^returnType}}void{{/returnType}} + * @return {{{vendorExtensions.x-php-doc-return-type}}} {{#isDeprecated}} * @deprecated {{/isDeprecated}}