diff --git a/framework/validators/FilterValidator.php b/framework/validators/FilterValidator.php index 3cf440a6c3..ec70d45e8f 100644 --- a/framework/validators/FilterValidator.php +++ b/framework/validators/FilterValidator.php @@ -67,7 +67,7 @@ class FilterValidator extends Validator public function validateAttribute($object, $attribute) { $value = $object->$attribute; - if ($this->skipOnArray || !is_array($value)) { + if (!$this->skipOnArray || !is_array($value)) { $object->$attribute = call_user_func($this->filter, $value); } } diff --git a/tests/unit/framework/validators/FilterValidatorTest.php b/tests/unit/framework/validators/FilterValidatorTest.php index 8a21c47a7e..920ca8df10 100644 --- a/tests/unit/framework/validators/FilterValidatorTest.php +++ b/tests/unit/framework/validators/FilterValidatorTest.php @@ -26,7 +26,9 @@ class FilterValidatorTest extends TestCase 'attr_one' => ' to be trimmed ', 'attr_two' => 'set this to null', 'attr_empty1' => '', - 'attr_empty2' => null + 'attr_empty2' => null, + 'attr_array' => ['Maria', 'Anna', 'Elizabeth'], + 'attr_array_skipped' => ['John', 'Bill'] ]); $val = new FilterValidator(['filter' => 'trim']); $val->validateAttribute($m, 'attr_one'); @@ -42,6 +44,16 @@ class FilterValidatorTest extends TestCase $val->skipOnEmpty = true; $val->validateAttribute($m, 'attr_empty2'); $this->assertNotNull($m->attr_empty2); + $val->filter = function($value) { + + return implode(',', $value); + }; + $val->skipOnArray = false; + $val->validateAttribute($m, 'attr_array'); + $this->assertSame('Maria,Anna,Elizabeth', $m->attr_array); + $val->skipOnArray = true; + $val->validateAttribute($m, 'attr_array_skipped'); + $this->assertSame(['John', 'Bill'], $m->attr_array_skipped); } public function notToBeNull($value)