Skip to content

Commit 6ac19dc

Browse files
committed
Fix this issue
1 parent abd59d4 commit 6ac19dc

File tree

4 files changed

+43
-12
lines changed

4 files changed

+43
-12
lines changed

src/generator/default/dbmodel.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949
*/
5050
abstract class <?= $model->getClassName() ?> extends \yii\db\ActiveRecord
5151
{
52-
<?php if($scenarios = $model->getScenarios()):
53-
foreach($scenarios as $scenario): ?>
52+
<?php if ($scenarios = $model->getScenarios()):
53+
foreach ($scenarios as $scenario): ?>
5454
/**
5555
*<?= $scenario['description'] ?>
5656

@@ -76,7 +76,7 @@ public static function tableName()
7676
{
7777
return <?= var_export($model->getTableAlias()) ?>;
7878
}
79-
<?php if($scenarios): ?>
79+
<?php if ($scenarios): ?>
8080

8181
/**
8282
* Automatically generated scenarios from the model 'x-scenarios'.
@@ -92,7 +92,7 @@ public function scenarios()
9292
$default = parent::scenarios()[self::SCENARIO_DEFAULT];
9393

9494
return [
95-
<?php foreach($scenarios as $scenario): ?>
95+
<?php foreach ($scenarios as $scenario): ?>
9696
self::<?= $scenario['const'] ?> => $default,
9797
<?php endforeach; ?>
9898
/**

src/lib/ValidationRulesBuilder.php

+14-6
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
use cebe\yii2openapi\lib\items\Attribute;
1111
use cebe\yii2openapi\lib\items\DbModel;
1212
use cebe\yii2openapi\lib\items\ValidationRule;
13-
use yii\helpers\VarDumper;
14-
use yii\validators\DateValidator;
13+
use yii\db\Expression;
1514
use function count;
1615
use function implode;
1716
use function in_array;
@@ -192,12 +191,11 @@ private function defaultRule(Attribute $attribute):void
192191
if ($attribute->defaultValue === null) {
193192
return;
194193
}
195-
if ($attribute->defaultValue instanceof \yii\db\Expression) {
196-
return;
197-
}
198194

199195
$params = [];
200-
$params['value'] = $attribute->defaultValue;
196+
$params['value'] = ($attribute->defaultValue instanceof \yii\db\Expression) ?
197+
$this->f($attribute->defaultValue) :
198+
$attribute->defaultValue;
201199
$key = $attribute->columnName . '_default';
202200
$this->rules[$key] = new ValidationRule([$attribute->columnName], 'default', $params);
203201
}
@@ -251,4 +249,14 @@ private function prepareTypeScope():void
251249
$this->typeScope['safe'][$attribute->columnName] = $attribute->columnName;
252250
}
253251
}
252+
253+
private function f($dbExpr) // TODO rename
254+
{
255+
return new class($dbExpr->expression) extends Expression {
256+
public function __toString()
257+
{
258+
return '-yii-db-expression-starts-("' . $this->expression . '")-yii-db-expression-ends-';
259+
}
260+
};
261+
}
254262
}

src/lib/items/DbModel.php

+11-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
use yii\base\BaseObject;
1414
use yii\db\ColumnSchema;
1515
use yii\helpers\Inflector;
16-
use yii\helpers\StringHelper;
1716
use yii\helpers\VarDumper;
1817
use function array_filter;
1918
use function array_map;
@@ -109,7 +108,8 @@ public function getValidationRules():string
109108
$rules = Yii::createObject(ValidationRulesBuilder::class, [$this])->build();
110109
$rules = array_map('strval', $rules);
111110
$rules = VarDumper::export($rules);
112-
return str_replace([
111+
112+
$rules = str_replace([
113113
PHP_EOL,
114114
"\'",
115115
"'[[",
@@ -120,6 +120,15 @@ public function getValidationRules():string
120120
'[[',
121121
'],'
122122
], $rules);
123+
124+
$rules = str_replace(
125+
["'value' => '-yii-db-expression-starts-", "-yii-db-expression-ends-'"],
126+
["'value' => new \yii\db\Expression", ""],
127+
$rules,
128+
$count
129+
);
130+
131+
return $rules;
123132
}
124133

125134
/**

tests/unit/IssueFixTest.php

+14
Original file line numberDiff line numberDiff line change
@@ -360,4 +360,18 @@ public function test158BugGiiapiGeneratedRulesEnumWithTrim()
360360
]);
361361
$this->checkFiles($actualFiles, $expectedFiles);
362362
}
363+
364+
// https://github.com/php-openapi/yii2-openapi/issues/65
365+
// public function test65DefaultValueByConstantAndExpressionInCrudModelsFakerEtc()
366+
// {
367+
// $testFile = Yii::getAlias("@specs/issue_fix/65_default_value_by_constant_and_expression_in_crud_models_faker_etc/index.php");
368+
// $this->runGenerator($testFile);
369+
// $actualFiles = FileHelper::findFiles(Yii::getAlias('@app'), [
370+
// 'recursive' => true,
371+
// ]);
372+
// $expectedFiles = FileHelper::findFiles(Yii::getAlias("@specs/issue_fix/65_default_value_by_constant_and_expression_in_crud_models_faker_etc/mysql"), [
373+
// 'recursive' => true,
374+
// ]);
375+
// // $this->checkFiles($actualFiles, $expectedFiles); // TODO
376+
// }
363377
}

0 commit comments

Comments
 (0)