Skip to content

Commit 9588282

Browse files
committed
Added support prepare values of attributes with same name as the relation. Added comments, removed unused code.
1 parent 3e8e332 commit 9588282

File tree

4 files changed

+50
-44
lines changed

4 files changed

+50
-44
lines changed

src/components/BaseColumn.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -255,11 +255,6 @@ protected function prepareValue($contextParams = [])
255255
return $value;
256256
}
257257

258-
protected function isEmpty($value)
259-
{
260-
return $value === null || $value === [] || $value === '';
261-
}
262-
263258
/**
264259
* Returns element id.
265260
*

src/components/ValuePreparer.php

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?php
2+
23
/**
3-
* Created by PhpStorm.
4-
* User: execut
5-
* Date: 12/3/19
6-
* Time: 11:37 AM
4+
* @link https://github.com/unclead/yii2-multiple-input
5+
* @copyright Copyright (c) 2014 unclead
6+
* @license https://github.com/unclead/yii2-multiple-input/blob/master/LICENSE.md
77
*/
88

99
namespace unclead\multipleinput\components;
@@ -13,28 +13,52 @@
1313
use yii\db\ActiveRecordInterface;
1414
use yii\helpers\ArrayHelper;
1515

16+
/**
17+
* Class ValuePreparer.
18+
*
19+
* @package unclead\multipleinput\components
20+
*/
1621
class ValuePreparer
1722
{
18-
protected $model = null;
23+
/**
24+
* @var string Key of prepared attribute
25+
*/
1926
protected $name = null;
27+
28+
/**
29+
* @var mixed default value
30+
*/
2031
protected $defaultValue = null;
32+
33+
/**
34+
* ValuePreparer constructor.
35+
* @param string|null $name
36+
* @param mixed|null $defaultValue
37+
*/
2138
public function __construct($name = null, $defaultValue = null)
2239
{
2340
$this->name = $name;
2441
$this->defaultValue = $defaultValue;
2542
}
2643

27-
public function prepare($data, $contextParams = [])
44+
/**
45+
* @param $data Prepared data
46+
*
47+
* @return int|mixed|null|string
48+
*/
49+
public function prepare($data)
2850
{
2951
$value = null;
3052
if ($data instanceof ActiveRecordInterface) {
31-
$relation = $data->getRelation($this->name, false);
32-
if ($relation !== null) {
33-
$value = $relation->findFor($this->name, $data);
34-
} else if ($data->hasAttribute($this->name)) {
35-
$value = $data->getAttribute($this->name);
36-
} else {
53+
if ($data->canGetProperty($this->name)) {
3754
$value = $data->{$this->name};
55+
} else {
56+
$relation = $data->getRelation($this->name, false);
57+
if ($relation !== null) {
58+
$value = $relation->findFor($this->name, $data);
59+
} else {
60+
$value = $data->{$this->name};
61+
}
3862
}
3963
} else if ($data instanceof Model) {
4064
$value = $data->{$this->name};

tests/unit/components/ValuePreparerTest.php

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
<?php
2-
/**
3-
* Created by PhpStorm.
4-
* User: execut
5-
* Date: 12/3/19
6-
* Time: 11:25 AM
7-
*/
8-
92
namespace unclead\multipleinput\tests\unit\components;
3+
104
use unclead\multipleinput\components\ValuePreparer;
115
use unclead\multipleinput\tests\unit\data\TestActiveRecord;
126
use unclead\multipleinput\tests\unit\data\TestActiveRecordRelated;
@@ -79,12 +73,12 @@ public function testPrepareActiveRecordRelation() {
7973
$this->assertEquals($relatedModel, $result);
8074
}
8175

82-
public function testPrepareActiveRecordDatabaseAttribute() {
76+
public function testPrepareActiveRecordRelationWithSameAsAttributeName() {
8377
$model = new TestActiveRecord();
84-
$exprectedValue = 'test';
85-
$model->setDatabaseAttribute($exprectedValue);
78+
$relatedModel = new TestActiveRecordRelated();
79+
$model->testRelation = $relatedModel;
8680

87-
$preparer = new ValuePreparer('databaseAttribute');
88-
$this->assertEquals($exprectedValue, $preparer->prepare($model));
81+
$preparer = new ValuePreparer( 'testRelation');
82+
$this->assertEquals($relatedModel, $preparer->prepare($model));
8983
}
9084
}

tests/unit/data/TestActiveRecord.php

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
11
<?php
2-
/**
3-
* Created by PhpStorm.
4-
* User: execut
5-
* Date: 12/3/19
6-
* Time: 1:14 PM
7-
*/
8-
92
namespace unclead\multipleinput\tests\unit\data;
103

114

@@ -17,6 +10,7 @@ class TestActiveRecord extends ActiveRecord
1710
* @var string
1811
*/
1912
public $email;
13+
public $testRelation = null;
2014

2115
public function rules()
2216
{
@@ -36,20 +30,19 @@ public function getTestHasOneRelation() {}
3630

3731
public function attributes()
3832
{
39-
return ['databaseAttribute']; // TODO: Change the autogenerated stub
40-
}
41-
42-
protected $_databaseAttribute = null;
43-
public function setDatabaseAttribute($value) {
44-
$this->_databaseAttribute = $value;
33+
return ['testRelation']; // TODO: Change the autogenerated stub
4534
}
4635

4736
public function getAttribute($name)
4837
{
49-
if ($name === 'databaseAttribute') {
50-
return $this->_databaseAttribute;
38+
if ($name === 'testRelation') {
39+
return $this->testRelation;
5140
}
5241

5342
return parent::getAttribute($name);
5443
}
44+
45+
public function getTestRelation() {
46+
return $this->hasOne(TestActiveRecordRelated::class, []);
47+
}
5548
}

0 commit comments

Comments
 (0)