From 8ac80203ec557a7198e48adc66e9c1961c4cd6ce Mon Sep 17 00:00:00 2001 From: netfarma Date: Wed, 24 Oct 2018 09:13:23 +0200 Subject: [PATCH] discriminator.mapping for PHP template --- .../openapitools/codegen/DefaultCodegen.java | 3 +++ .../codegen/languages/PhpClientCodegen.java | 2 ++ .../resources/php/ObjectSerializer.mustache | 2 +- .../main/resources/php/model_generic.mustache | 25 +++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index b7d74c78ec45..834ff9e31a3f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -1562,6 +1562,9 @@ public CodegenModel fromModel(String name, Schema schema, Map al Map allProperties; List allRequired; + //composed schema can also have properties + addVars(m, unaliasPropertySchema(allDefinitions, schema.getProperties()), schema.getRequired()); + if (supportsInheritance || supportsMixins) { allProperties = new LinkedHashMap(); allRequired = new ArrayList(); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpClientCodegen.java index e4c05b01189a..824bee9dabd2 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpClientCodegen.java @@ -21,6 +21,7 @@ import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenType; import org.openapitools.codegen.SupportingFile; +import org.openapitools.codegen.mustache.UppercaseLambda; import java.io.File; import java.util.ArrayList; @@ -65,6 +66,7 @@ public PhpClientCodegen() { Collections.sort(sortedLanguageSpecificPrimitives); String primitives = "'" + StringUtils.join(sortedLanguageSpecificPrimitives, "', '") + "'"; additionalProperties.put("primitives", primitives); + additionalProperties.put("uppercase", new UppercaseLambda()); cliOptions.add(new CliOption(COMPOSER_VENDOR_NAME, "The vendor name used in the composer package name. The template uses {{composerVendorName}}/{{composerProjectName}} for the composer package name. e.g. yaypets. IMPORTANT NOTE (2016/03): composerVendorName will be deprecated and replaced by gitUserId in the next openapi-generator release")); cliOptions.add(new CliOption(COMPOSER_PROJECT_NAME, "The project name used in the composer package name. The template uses {{composerVendorName}}/{{composerProjectName}} for the composer package name. e.g. petstore-client. IMPORTANT NOTE (2016/03): composerProjectName will be deprecated and replaced by gitRepoId in the next openapi-generator release")); diff --git a/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache b/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache index 3ab026909ec5..cfbc9e7fbbea 100644 --- a/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache +++ b/modules/openapi-generator/src/main/resources/php/ObjectSerializer.mustache @@ -295,7 +295,7 @@ class ObjectSerializer // If a discriminator is defined and points to a valid subclass, use it. $discriminator = $class::DISCRIMINATOR; if (!empty($discriminator) && isset($data->{$discriminator}) && is_string($data->{$discriminator})) { - $subclass = '\{{invokerPackage}}\Model\\' . $data->{$discriminator}; + $subclass = $class::getClassByDiscriminatorValue($data->{$discriminator}); if (is_subclass_of($subclass, $class)) { $class = $subclass; } diff --git a/modules/openapi-generator/src/main/resources/php/model_generic.mustache b/modules/openapi-generator/src/main/resources/php/model_generic.mustache index 85610c2f5725..c41966cd1712 100644 --- a/modules/openapi-generator/src/main/resources/php/model_generic.mustache +++ b/modules/openapi-generator/src/main/resources/php/model_generic.mustache @@ -9,6 +9,17 @@ class {{classname}} {{#parentSchema}}extends {{{parent}}} {{/parentSchema}}{{^pa */ protected static $openAPIModelName = '{{name}}'; + /** + * Array of property to discriminator type mappings. Used for (de)serialization + * + * @var string[] + */ + protected static $discriminatorMapping = [ + {{#discriminator.mappedModels}} + '{{#uppercase}}{{mappingName}}{{/uppercase}}' => {{{modelName}}}::class, + {{/discriminator.mappedModels}} + ]; + /** * Array of property to type mappings. Used for (de)serialization * @@ -399,6 +410,20 @@ class {{classname}} {{#parentSchema}}extends {{{parent}}} {{/parentSchema}}{{^pa unset($this->container[$offset]); } + /** + * @param $discriminator + * @return string + */ + public static function getClassByDiscriminatorValue($discriminator) + { + $discriminatorKey = strtoupper($discriminator); + if(isset(self::$discriminatorMapping[$discriminatorKey])) { + return self::$discriminatorMapping[$discriminatorKey]; + } + + return $discriminator; + } + /** * Gets the string presentation of the object *