Skip to content

Commit 95670f5

Browse files
committed
Merge branch 'master' of github.com:php-openapi/yii2-openapi into 79-response-status-codes-are-not-the-codes-defined-in-spec
2 parents d89fe28 + 4217459 commit 95670f5

File tree

18 files changed

+442
-30
lines changed

18 files changed

+442
-30
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ related objects, `x-no-relation` (type: boolean, default: false) is used.
350350

351351
This will not generate 'comments' column in database migrations. But it will generate `getComments()` relation in Yii model file.
352352

353-
In order to make it real database column, extension `x-no-relation` can be used.
353+
In order to make it real database column, OpenAPI extension `x-no-relation` can be used.
354354

355355
```yaml
356356
comments:

src/lib/ValidationRulesBuilder.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,10 +243,7 @@ private function prepareTypeScope():void
243243
if ($attribute->isReadOnly()) {
244244
continue;
245245
}
246-
// column/field/property with name `id` is considered as Primary Key by this library, and it is automatically handled by DB/Yii; so remove it from validation `rules()`
247-
if (in_array($attribute->columnName, ['id', $this->model->pkName]) ||
248-
in_array($attribute->propertyName, ['id', $this->model->pkName])
249-
) {
246+
if ($this->isIdColumn($attribute)) {
250247
continue;
251248
}
252249
if (/*$attribute->defaultValue === null &&*/ $attribute->isRequired()) {

src/lib/openapi/ComponentSchema.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
use cebe\yii2openapi\lib\SchemaToDatabase;
1515
use Generator;
1616
use Yii;
17-
use yii\helpers\Inflector;
18-
use yii\helpers\StringHelper;
1917
use function in_array;
2018

2119
class ComponentSchema
@@ -106,7 +104,9 @@ public function isRequiredProperty(string $propName):bool
106104

107105
public function isNonDb():bool
108106
{
109-
return isset($this->schema->{CustomSpecAttr::TABLE}) && $this->schema->{CustomSpecAttr::TABLE} === false;
107+
return
108+
isset($this->schema->{CustomSpecAttr::TABLE}) &&
109+
$this->schema->{CustomSpecAttr::TABLE} === false;
110110
}
111111

112112
public function resolveTableName(string $schemaName):string

src/lib/openapi/PropertySchema.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,11 @@ public function __construct(SpecObjectInterface $property, string $name, Compone
145145
$property = $this->property;
146146
}
147147

148+
// don't go reference part if `x-no-relation` is true
149+
if ($this->getAttr(CustomSpecAttr::NO_RELATION)) {
150+
return;
151+
}
152+
148153
if ($property instanceof Reference) {
149154
$this->initReference();
150155
} elseif (
@@ -497,6 +502,7 @@ public function guessDbType($forReference = false):string
497502
}
498503
return YiiDbSchema::TYPE_TEXT;
499504
case 'object':
505+
case 'array':
500506
{
501507
return YiiDbSchema::TYPE_JSON;
502508
}

tests/specs/issue_fix/20_consider_openapi_spec_examples_in_faker_code_generation/mysql/migrations_mysql_db/m200000_000001_create_table_pets.php

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,21 @@ public function up()
1111
'id' => $this->primaryKey(),
1212
'name' => $this->text()->notNull(),
1313
'age' => $this->integer()->null()->defaultValue(null),
14-
'tags' => $this->text()->null(),
15-
'tags_arbit' => $this->text()->null(),
16-
'number_arr' => $this->text()->null(),
17-
'number_arr_min_uniq' => $this->text()->null(),
18-
'int_arr' => $this->text()->null(),
19-
'int_arr_min_uniq' => $this->text()->null(),
20-
'bool_arr' => $this->text()->null(),
21-
'arr_arr_int' => $this->text()->null(),
22-
'arr_arr_str' => $this->text()->null(),
23-
'arr_arr_arr_str' => $this->text()->null(),
24-
'arr_of_obj' => $this->text()->null(),
25-
'user_ref_obj_arr' => $this->string()->null()->defaultValue(null),
26-
'one_of_arr' => $this->text()->null(),
27-
'one_of_arr_complex' => $this->text()->null(),
28-
'one_of_from_multi_ref_arr' => $this->text()->null(),
14+
'tags' => 'json NOT NULL',
15+
'tags_arbit' => 'json NOT NULL',
16+
'number_arr' => 'json NOT NULL',
17+
'number_arr_min_uniq' => 'json NOT NULL',
18+
'int_arr' => 'json NOT NULL',
19+
'int_arr_min_uniq' => 'json NOT NULL',
20+
'bool_arr' => 'json NOT NULL',
21+
'arr_arr_int' => 'json NOT NULL',
22+
'arr_arr_str' => 'json NOT NULL',
23+
'arr_arr_arr_str' => 'json NOT NULL',
24+
'arr_of_obj' => 'json NOT NULL',
25+
'user_ref_obj_arr' => 'json NOT NULL',
26+
'one_of_arr' => 'json NOT NULL',
27+
'one_of_arr_complex' => 'json NOT NULL',
28+
'one_of_from_multi_ref_arr' => 'json NOT NULL',
2929
]);
3030
}
3131

tests/specs/issue_fix/20_consider_openapi_spec_examples_in_faker_code_generation/mysql/models/base/Pet.php

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,12 @@
2323
* @property array $arr_arr_str
2424
* @property array $arr_arr_arr_str
2525
* @property array $arr_of_obj
26-
* @property User[] $user_ref_obj_arr
26+
* @property array $user_ref_obj_arr
2727
* @property array $one_of_arr
2828
* @property array $one_of_arr_complex
2929
* @property array $one_of_from_multi_ref_arr
3030
*
3131
* @property array|\app\models\User[] $userRefObjArrNormal
32-
* @property array|\app\models\User[] $userRefObjArr
3332
*/
3433
abstract class Pet extends \yii\db\ActiveRecord
3534
{
@@ -53,9 +52,4 @@ public function getUserRefObjArrNormal()
5352
{
5453
return $this->hasMany(\app\models\User::class, ['pet_id' => 'id'])->inverseOf('pet');
5554
}
56-
57-
public function getUserRefObjArr()
58-
{
59-
return $this->hasMany(\app\models\User::class, ['pet_id' => 'id'])->inverseOf('pet');
60-
}
6155
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
return [
4+
'openApiPath' => '@specs/issue_fix/23_consider_openapi_extension_x_no_relation_also_in_other_pertinent_place/index.yaml',
5+
'generateUrls' => false,
6+
'generateModels' => true,
7+
'excludeModels' => [
8+
'Error',
9+
],
10+
'generateControllers' => false,
11+
'generateMigrations' => true,
12+
'generateModelFaker' => true, // `generateModels` must be `true` in order to use `generateModelFaker` as `true`
13+
];
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
openapi: 3.0.3
2+
3+
info:
4+
title: '#23'
5+
version: 1.0.0
6+
7+
paths:
8+
/:
9+
get:
10+
responses:
11+
'200':
12+
description: The Response
13+
14+
15+
16+
components:
17+
schemas:
18+
Payments:
19+
properties:
20+
id:
21+
type: integer
22+
currency:
23+
type: string
24+
samples:
25+
type: array
26+
x-no-relation: true
27+
items:
28+
$ref: '#/components/schemas/Sample'
29+
30+
Sample:
31+
properties:
32+
id:
33+
type: integer
34+
message:
35+
type: string
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
/**
4+
* Table for Payments
5+
*/
6+
class m200000_000000_create_table_payments extends \yii\db\Migration
7+
{
8+
public function up()
9+
{
10+
$this->createTable('{{%payments}}', [
11+
'id' => $this->primaryKey(),
12+
'currency' => $this->text()->null(),
13+
'samples' => 'json NOT NULL',
14+
]);
15+
}
16+
17+
public function down()
18+
{
19+
$this->dropTable('{{%payments}}');
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
/**
4+
* Table for Sample
5+
*/
6+
class m200000_000001_create_table_samples extends \yii\db\Migration
7+
{
8+
public function up()
9+
{
10+
$this->createTable('{{%samples}}', [
11+
'id' => $this->primaryKey(),
12+
'message' => $this->text()->null(),
13+
]);
14+
}
15+
16+
public function down()
17+
{
18+
$this->dropTable('{{%samples}}');
19+
}
20+
}

0 commit comments

Comments
 (0)