swagger-api / swagger-codegen

swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition.
http://swagger.io
Apache License 2.0
16.72k stars 6.02k forks source link

[PHP] Bug missing commas in key-value arrays of generated models and parameter of function calls #12404

Open that-ambuj opened 1 month ago

that-ambuj commented 1 month ago
Description

The code generated contains arrays like $swaggerTypes as members of Model types but the arrays do not seem to contain any commas to seperate different key value pairs

Swagger-codegen version
3.0.0-rc1
Swagger declaration file content or url

This is the schema for the User object in the first snippet

"User": {
  "type": "object",
  "description": "User",
  "required": [
    "firstName",
    "email",
    "userGroupId"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Email"
    },
    "firstName": {
      "type": "string",
      "description": "First name"
    },
    "lastName": {
      "type": "string",
      "description": "Last name",
      "nullable": true
    },
    "userGroupId": {
      "type": "string",
      "format": "uuid",
      "description": "User group id"
    }
  }
}
Command line used for generation
java --add-opens=java.base/java.util=ALL-UNNAMED -jar ./swagger-codegen-cli-3.0.0-rc1.jar generate -i http://localhost:8080/api-docs/openapi.json -l php
# I know it's not supposed to be localhost but it should not be related to the spec.
Steps to reproduce
  1. Run the above command
Related issues/PRs

Issue

It generates this invalid code for arrays in PHP:

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerTypes = [
        'email' => 'string''first_name' => 'string''last_name' => 'string''user_group_id' => 'string'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerFormats = [
        'email' => null'first_name' => null'last_name' => null'user_group_id' => 'uuid'
    ];

The commas are missing between key-value pairs.

In some functions for API code, it calls the functions without commas.

    public function getGroupsWithHttpInfo($user_id, $first = null, $max = null)
    {
        $returnType = '\Swagger\Client\Model\InlineResponse20020';
        $request = $this->getGroupsRequest($user_id$first$max); // See the parameters in this line of code.
Suggest a fix/enhancement