Skip to content

Commit 09a4da0

Browse files
authored
Make php's array a primitive (#10093)
Fixes a bug where code generation would sometimes treat arrays as objects and break serialization and code documentation.
1 parent ac1ef4b commit 09a4da0

14 files changed

Lines changed: 88 additions & 7 deletions

File tree

docs/generators/php-laravel.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
4040

4141
<ul class="column-ul">
4242
<li>DateTime</li>
43+
<li>array</li>
4344
<li>bool</li>
4445
<li>boolean</li>
4546
<li>byte</li>

docs/generators/php-lumen.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
4040

4141
<ul class="column-ul">
4242
<li>DateTime</li>
43+
<li>array</li>
4344
<li>bool</li>
4445
<li>boolean</li>
4546
<li>byte</li>

docs/generators/php-mezzio-ph.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
4141

4242
<ul class="column-ul">
4343
<li>DateTime</li>
44+
<li>array</li>
4445
<li>bool</li>
4546
<li>boolean</li>
4647
<li>byte</li>

docs/generators/php-slim-deprecated.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
4040

4141
<ul class="column-ul">
4242
<li>DateTime</li>
43+
<li>array</li>
4344
<li>bool</li>
4445
<li>boolean</li>
4546
<li>byte</li>

docs/generators/php-slim4.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
4141

4242
<ul class="column-ul">
4343
<li>DateTime</li>
44+
<li>array</li>
4445
<li>bool</li>
4546
<li>boolean</li>
4647
<li>byte</li>

docs/generators/php.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
4141

4242
<ul class="column-ul">
4343
<li>DateTime</li>
44+
<li>array</li>
4445
<li>bool</li>
4546
<li>boolean</li>
4647
<li>byte</li>

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPhpCodegen.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public AbstractPhpCodegen() {
8989
"float",
9090
"string",
9191
"object",
92+
"array",
9293
"DateTime",
9394
"mixed",
9495
"number",

modules/openapi-generator/src/test/java/org/openapitools/codegen/php/AbstractPhpCodegenTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,16 @@
1717

1818
package org.openapitools.codegen.php;
1919

20+
import io.swagger.v3.oas.models.OpenAPI;
21+
import io.swagger.v3.oas.models.media.Schema;
22+
2023
import org.openapitools.codegen.CodegenConstants;
24+
import org.openapitools.codegen.CodegenModel;
2125
import org.openapitools.codegen.CodegenOperation;
26+
import org.openapitools.codegen.CodegenProperty;
2227
import org.openapitools.codegen.CodegenType;
2328
import org.openapitools.codegen.languages.AbstractPhpCodegen;
29+
import org.openapitools.codegen.TestUtils;
2430
import org.testng.Assert;
2531
import org.testng.annotations.DataProvider;
2632
import org.testng.annotations.Test;
@@ -122,6 +128,24 @@ public static Object[][] composerNames() {
122128
};
123129
}
124130

131+
@Test(description = "Issue #8945")
132+
public void testArrayOfArrays() {
133+
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_8945.yaml");
134+
final AbstractPhpCodegen codegen = new P_AbstractPhpCodegen();
135+
136+
Schema test1 = openAPI.getComponents().getSchemas().get("MyResponse");
137+
CodegenModel cm1 = codegen.fromModel("MyResponse", test1);
138+
139+
// Make sure we got the container object.
140+
Assert.assertEquals(cm1.getDataType(), "object");
141+
Assert.assertEquals(codegen.getTypeDeclaration("MyResponse"), "\\php\\Model\\MyResponse");
142+
143+
// Assert the array type is properly detected.
144+
CodegenProperty cp1 = cm1.vars.get(0);
145+
cp1 = codegen.fromProperty("ArrayProp", test1);
146+
Assert.assertTrue(cp1.isPrimitiveType);
147+
}
148+
125149
private static class P_AbstractPhpCodegen extends AbstractPhpCodegen {
126150
@Override
127151
public CodegenType getTag() {
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
openapi: 3.0.1
2+
info:
3+
title: OpenAPI Petstore
4+
description: "for schemas with properties and required ensure correct hasVars, hasRequired, vars, and requiredVars"
5+
license:
6+
name: Apache-2.0
7+
url: https://www.apache.org/licenses/LICENSE-2.0.html
8+
version: 1.0.0
9+
servers:
10+
- url: http://petstore.swagger.io:80/v2
11+
tags: []
12+
paths:
13+
/sut:
14+
get:
15+
operationId: getArrayOfArrays
16+
responses:
17+
'200':
18+
description: OK
19+
schema:
20+
$ref: '#/definitions/MyResponse'
21+
components:
22+
schemas:
23+
MyResponse:
24+
type: object
25+
properties:
26+
ArrayOfArrays:
27+
type: array
28+
items:
29+
$ref: '#/components/schemas/ArrayProp'
30+
ArrayOfObjects:
31+
type: array
32+
items:
33+
$ref: '#/components/schemas/ObjectProp'
34+
ArrayOfArrays:
35+
type: array
36+
items:
37+
$ref: '#/components/schemas/ArrayProp'
38+
ArrayOfObjects:
39+
type: array
40+
items:
41+
$ref: '#/components/schemas/ObjectProp'
42+
ArrayProp:
43+
type: array
44+
items:
45+
type: string
46+
ObjectProp:
47+
type: object
48+
properties:
49+
name:
50+
type: string

samples/client/petstore/php/OpenAPIClient-php/docs/Model/AdditionalPropertiesClass.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
Name | Type | Description | Notes
66
------------ | ------------- | ------------- | -------------
77
**map_property** | **array<string,string>** | | [optional]
8-
**map_of_map_property** | [**array<string,array<string,string>>**](array.md) | | [optional]
8+
**map_of_map_property** | **array<string,array<string,string>>** | | [optional]
99

1010
[[Back to Model list]](../../README.md#models) [[Back to API list]](../../README.md#endpoints) [[Back to README]](../../README.md)

0 commit comments

Comments
 (0)