Skip to content

Commit 1523023

Browse files
committed
Merge pull request #483 from getloaded/custom-setter-for-aliased-attribute
Allow custom setter methods to run for aliased attributes (fixes #350)
2 parents 14e926a + cf93036 commit 1523023

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

lib/Model.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ public function __set($name, $value)
428428
if (array_key_exists($name, static::$alias_attribute))
429429
$name = static::$alias_attribute[$name];
430430

431-
elseif (method_exists($this,"set_$name"))
431+
if (method_exists($this,"set_$name"))
432432
{
433433
$name = "set_$name";
434434
return $this->$name($value);

test/ActiveRecordTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,22 @@ public function test_alias_attribute_setter()
281281
$this->assert_equals($venue->marquee, $venue->name);
282282
}
283283

284+
public function test_alias_attribute_custom_setter()
285+
{
286+
Venue::$use_custom_set_city_setter = true;
287+
$venue = Venue::find(1);
288+
289+
$venue->mycity = 'cityname';
290+
$this->assert_equals($venue->mycity, 'cityname#');
291+
$this->assert_equals($venue->mycity, $venue->city);
292+
293+
$venue->city = 'anothercity';
294+
$this->assert_equals($venue->city, 'anothercity#');
295+
$this->assert_equals($venue->city, $venue->mycity);
296+
297+
Venue::$use_custom_set_city_setter = false;
298+
}
299+
284300
public function test_alias_from_mass_attributes()
285301
{
286302
$venue = new Venue(array('marquee' => 'meme', 'id' => 123));

test/models/Venue.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ class Venue extends ActiveRecord\Model
44
static $use_custom_get_state_getter = false;
55
static $use_custom_set_state_setter = false;
66

7+
static $use_custom_set_city_setter = false;
78

89
static $has_many = array(
910
'events',
@@ -32,5 +33,13 @@ public function set_state($value)
3233
else
3334
return $this->assign_attribute('state', $value);
3435
}
36+
37+
public function set_city($value)
38+
{
39+
if (self::$use_custom_set_city_setter)
40+
return $this->assign_attribute('city', $value . '#');
41+
else
42+
return $this->assign_attribute('city', $value);
43+
}
3544

3645
}

0 commit comments

Comments
 (0)