Browse Source

Fix issue when passing ValidationRule instance to Validator::add().

Refs #11781.
ADmad 8 years ago
parent
commit
1dac37a82b
2 changed files with 10 additions and 1 deletions
  1. 4 1
      src/Validation/Validator.php
  2. 6 0
      tests/TestCase/Validation/ValidatorTest.php

+ 4 - 1
src/Validation/Validator.php

@@ -397,7 +397,10 @@ class Validator implements ArrayAccess, IteratorAggregate, Countable
         }
 
         foreach ($rules as $name => $rule) {
-            $field->add($name, $rule + ['rule' => $name]);
+            if (is_array($rule)) {
+                $rule += ['rule' => $name];
+            }
+            $field->add($name, $rule);
         }
 
         return $this;

+ 6 - 0
tests/TestCase/Validation/ValidatorTest.php

@@ -16,6 +16,7 @@ namespace Cake\Test\TestCase\Validation;
 
 use Cake\TestSuite\TestCase;
 use Cake\Validation\Validation;
+use Cake\Validation\ValidationRule;
 use Cake\Validation\ValidationSet;
 use Cake\Validation\Validator;
 
@@ -48,6 +49,11 @@ class ValidatorTest extends TestCase
         $validator->add('email', 'notBlank');
         $result = $validator->field('email')->rule('notBlank')->get('rule');
         $this->assertEquals('notBlank', $result);
+
+        $rule = new ValidationRule();
+        $validator->add('field', 'myrule', $rule);
+        $result = $validator->field('field')->rule('myrule');
+        $this->assertSame($rule, $result);
     }
 
     /**