Przeglądaj źródła

ZF-9401: Allow numerical names in Zend_Form

- Patch by Christian Albrecht

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21911 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 15 lat temu
rodzic
commit
68b94493c3
2 zmienionych plików z 67 dodań i 5 usunięć
  1. 5 5
      library/Zend/Form.php
  2. 62 0
      tests/Zend/Form/FormTest.php

+ 5 - 5
library/Zend/Form.php

@@ -842,7 +842,7 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
     public function setName($name)
     {
         $name = $this->filterName($name);
-        if (('0' !== $name) && empty($name)) {
+        if ('' === (string)$name) {
             require_once 'Zend/Form/Exception.php';
             throw new Zend_Form_Exception('Invalid name provided; must contain only valid variable characters and be non-empty');
         }
@@ -1423,7 +1423,7 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
     {
         $origName = $this->getElementsBelongTo();
         $name = $this->filterName($array, true);
-        if (empty($name)) {
+        if ('' === $name) {
             $name = null;
         }
         $this->_elementsBelongTo = $name;
@@ -1475,7 +1475,7 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
     {
         if ((null === $this->_elementsBelongTo) && $this->isArray()) {
             $name = $this->getName();
-            if (!empty($name)) {
+            if ('' !== (string)$name) {
                 return $name;
             }
         }
@@ -1768,7 +1768,7 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
     {
         if (null === $name) {
             $name = $group->getName();
-            if (empty($name)) {
+            if ('' === (string)$name) {
                 require_once 'Zend/Form/Exception.php';
                 throw new Zend_Form_Exception('Invalid display group added; requires name');
             }
@@ -1960,7 +1960,7 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
      */
     protected function _getArrayName($value)
     {
-        if (empty($value) || !is_string($value)) {
+        if (!is_string($value) || '' === $value) {
             return $value;
         }
 

+ 62 - 0
tests/Zend/Form/FormTest.php

@@ -1617,6 +1617,68 @@ class Zend_Form_FormTest extends PHPUnit_Framework_TestCase
         $this->assertTrue(isset($msgs['foo']['zoo']['iek']));
     }
 
+    public function _setup9401()
+    {
+        $sub0 = 0;
+        $this->form->addSubForm(new Zend_Form_SubForm(), $sub0)
+                   ->$sub0->setElementsBelongTo('f[2]')
+                          ->addElement('text', 'foo')
+                          ->foo->addValidator('Identical',
+                                              false,
+                                              array('foo Value'));
+
+        $this->form->$sub0->addSubForm(new Zend_Form_SubForm(), $sub0)
+                          ->$sub0->addElement('text', 'quo')
+                                 ->quo->addValidator('Identical',
+                                                     false,
+                                                     array('quo Value'));
+
+        $data = array('valid' => array('f' =>
+                                       array(2 =>
+                                             array('foo' => 'foo Value',
+                                                   0 =>
+                                                   array('quo' => 'quo Value')))),
+                      'invalid' => array('f' =>
+                                         array(2 =>
+                                               array('foo' => 'foo Invalid',
+                                                     0 =>
+                                                     array('quo' => 'quo Value')))),
+                      'partial' => array('f' =>
+                                         array(2 =>
+                                               array(0 =>
+                                                     array('quo' => 'quo Value')))));
+        return $data;                      
+    }
+    
+    public function testGetErrorsNumericalSubForms()
+    {
+        $data = $this->_setup9401();
+        $this->form->isValid($data['invalid']);
+        $err = $this->form->getErrors();
+        $this->assertTrue(is_array($err['f'][2]['foo']) && !empty($err['f'][2]['foo']));
+    }
+    
+    public function testGetMessagesNumericalSubForms()
+    {
+        $data = $this->_setup9401();
+        $this->form->isValid($data['invalid']);
+        $msg = $this->form->getMessages();
+        $this->assertTrue(is_array($msg['f'][2]['foo']) && !empty($msg['f'][2]['foo']));
+    }
+
+    public function testGetValuesNumericalSubForms()
+    {
+        $data = $this->_setup9401();
+        $this->form->populate($data['valid']);
+        $this->assertEquals($this->form->getValues(), $data['valid']);
+    }
+
+    public function testGetValidValuesNumericalSubForms()
+    {
+        $data = $this->_setup9401();
+        $this->assertEquals($this->form->getValidValues($data['invalid']), $data['partial']);
+    }
+
 
     // Display groups