mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 22:57:40 +08:00 
			
		
		
		
	Fixed canGetProperty() and canSetProperty() returns false for yii\db\BaseActiveRecord attributes
				
					
				
			This commit is contained in:
		@ -7,6 +7,7 @@ Yii Framework 2 Change Log
 | 
			
		||||
- Enh #9989: ActiveForm now respects formtarget, formmethod and formenctype attributes of submit button (AnatolyRugalev)
 | 
			
		||||
- Enh #12296: Added value validation to `yii\log\Target::setLevels()` (Mak-Di)
 | 
			
		||||
- Enh #12073: Added the ability to suppress the generation of input hint when it is specified through  `Model::attributeHints()` (PowerGamer1)
 | 
			
		||||
- Bug #9561: Fixed `canGetProperty()` and `canSetProperty()` returns `false` for `yii\db\BaseActiveRecord` attributes (klimov-paul)
 | 
			
		||||
- Bug #11990: Fixed `yii\db\BaseActiveRecord::refresh()` may set incorrect `oldAttributes` values at some cases (only-victor)
 | 
			
		||||
- Bug #12009: Do not render "for" field label attribute for active form RadioList and CheckboxList (shevchik87, samdark)
 | 
			
		||||
- Bug #12068: Added missing 'LEVEL_PROFILE' for the syslog target (Mak-Di)
 | 
			
		||||
 | 
			
		||||
@ -230,6 +230,28 @@ abstract class BaseActiveRecord extends Model implements ActiveRecordInterface
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->hasAttribute($name)) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return parent::canGetProperty($name, $checkVars, $checkBehaviors);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->hasAttribute($name)) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return parent::canSetProperty($name, $checkVars, $checkBehaviors);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PHP getter magic method.
 | 
			
		||||
     * This method is overridden so that attributes and related objects can be accessed like properties.
 | 
			
		||||
 | 
			
		||||
@ -1293,4 +1293,18 @@ abstract class ActiveRecordTest extends DatabaseTestCase
 | 
			
		||||
        $this->assertTrue($newOrder->getIsNewRecord());
 | 
			
		||||
        $this->assertEquals($newTotal, $newOrder->total);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testAttributeAccess()
 | 
			
		||||
    {
 | 
			
		||||
        $model = new Customer();
 | 
			
		||||
 | 
			
		||||
        $this->assertTrue($model->canSetProperty('name'));
 | 
			
		||||
        $this->assertTrue($model->canGetProperty('name'));
 | 
			
		||||
        $this->assertFalse(isset($model->name));
 | 
			
		||||
 | 
			
		||||
        $model->name = 'foo';
 | 
			
		||||
        $this->assertTrue(isset($model->name));
 | 
			
		||||
        unset($model->name);
 | 
			
		||||
        $this->assertNull($model->name);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user