Przeglądaj źródła

[ZF-6623] Zend_Form/Zend_Validate:

- added Array support for validation parameters to Zend_Form

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@18058 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 lat temu
rodzic
commit
bfd207663f
2 zmienionych plików z 29 dodań i 3 usunięć
  1. 16 1
      library/Zend/Form/Element.php
  2. 13 2
      tests/Zend/Form/ElementTest.php

+ 16 - 1
library/Zend/Form/Element.php

@@ -2009,7 +2009,22 @@ class Zend_Form_Element implements Zend_Validate_Interface
 
             $r = new ReflectionClass($name);
             if ($r->hasMethod('__construct')) {
-                $instance = $r->newInstanceArgs((array) $validator['options']);
+                $numeric = false;
+                if (is_array($validator['options'])) {
+                    $keys    = array_keys($validator['options']);
+                    foreach($keys as $key) {
+                        if (is_numeric($key)) {
+                            $numeric = true;
+                            break;
+                        }
+                    }
+                }
+
+                if ($numeric) {
+                    $instance = $r->newInstanceArgs((array) $validator['options']);
+                } else {
+                    $instance = $r->newInstance($validator['options']);
+                }
             } else {
                 $instance = $r->newInstance();
             }

+ 13 - 2
tests/Zend/Form/ElementTest.php

@@ -729,7 +729,7 @@ class Zend_Form_ElementTest extends PHPUnit_Framework_TestCase
         $this->element->addValidators(array(
             'NotEmpty',
             'Alnum',
-            'Digits', 
+            'Digits',
         ));
 
         $validator  = $this->element->getValidator('Alnum');
@@ -1176,7 +1176,7 @@ class Zend_Form_ElementTest extends PHPUnit_Framework_TestCase
         $this->element->addFilters(array(
             'Alpha',
             'Alnum',
-            'Digits', 
+            'Digits',
         ));
 
         $filter  = $this->element->getFilter('Alnum');
@@ -2018,6 +2018,17 @@ class Zend_Form_ElementTest_ArrayFilter implements Zend_Filter_Interface
         }
         return (strstr($value, 'ba'));
     }
+
+    /**
+     * Check array notation for validators
+     */
+    public function testValidatorsGivenArrayKeysOnValidation()
+    {
+        $username = new Zend_Form_Element('username');
+        $username->addValidator('stringLength', true, array('min' => 5, 'max' => 20, 'ignore' => 'something'));
+        $form = new Zend_Form(array('elements' => array($username)));
+        $this->assertTrue($form->isValid(array('username' => 'abcde')));
+    }
 }
 
 if (PHPUnit_MAIN_METHOD == 'Zend_Form_ElementTest::main') {