Преглед изворни кода

ZF-9407: make getValidValues() respect elementsBelongTo

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21703 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew пре 16 година
родитељ
комит
87010c43dc
2 измењених фајлова са 70 додато и 3 уклоњено
  1. 19 3
      library/Zend/Form.php
  2. 51 0
      tests/Zend/Form/FormTest.php

+ 19 - 3
library/Zend/Form.php

@@ -1326,10 +1326,14 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
      * values to persist them.
      *
      * @param  array $data
+     * @param  bool $suppressArrayNotation
      * @return array
      */
-    public function getValidValues($data)
+    public function getValidValues($data, $suppressArrayNotation = false)
     {
+        if ($this->isArray()) {
+            $data = $this->_dissolveArrayValue($data, $this->getElementsBelongTo());
+        }
         $values = array();
         foreach ($this->getElements() as $key => $element) {
             if (isset($data[$key])) {
@@ -1339,10 +1343,22 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
             }
         }
         foreach ($this->getSubForms() as $key => $form) {
-            if (isset($data[$key])) {
-                $values[$key] = $form->getValidValues($data[$key]);
+            if (isset($data[$key]) && !$form->isArray()) {
+                $tmp = $form->getValidValues($data[$key]);
+                if (!empty($tmp)) {
+                    $values[$key] = $tmp;
+                }
+            } else {
+                $tmp = $form->getValidValues($data, true);
+                if (!empty($tmp)) {
+                    $fValues = $this->_attachToArray($tmp, $form->getElementsBelongTo());
+                    $values = array_merge($values, $fValues);
+                }
             }
         }
+        if (!$suppressArrayNotation && $this->isArray() && !empty($values)) {
+            $values = $this->_attachToArray($values, $this->getElementsBelongTo());
+        }
 
         return $values;
     }

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

@@ -1528,6 +1528,57 @@ class Zend_Form_FormTest extends PHPUnit_Framework_TestCase
         $this->assertRegexp('/value=.foo Value./', $this->form->render());
     }
 
+    public function _setup9350()
+    {
+        $this->form->addSubForm(new Zend_Form_SubForm(), 'foo')
+                   ->foo->setElementsBelongTo('foo[foo]')
+                        ->addSubForm(new Zend_Form_SubForm(), 'foo')
+                        ->foo->setIsArray(false)
+                             ->addElement('text', 'foo')
+                             ->foo->addValidator('Identical',
+                                                 false,
+                                                 array('foo Value'));
+
+        $this->form->foo->addSubForm(new Zend_Form_SubForm(), 'baz')
+                   ->baz->setIsArray(false)
+                        ->addSubForm(new Zend_Form_SubForm(), 'baz')
+                        ->baz->setElementsBelongTo('baz[baz]')
+                             ->addElement('text', 'baz')
+                             ->baz->addValidator('Identical',
+                                                 false,
+                                                 array('baz Value'));
+
+        $data = array('valid' => array('foo' =>
+                                       array('foo' =>
+                                             array('foo' =>
+                                                   array('foo' => 'foo Value'),
+                                                   'baz' => 
+                                                   array('baz' => 
+                                                         array('baz' =>
+                                                               array('baz' => 'baz Value')))))),
+                      'invalid' => array('foo' =>
+                                         array('foo' =>
+                                               array('foo' =>
+                                                     array('foo' => 'foo Invalid'),
+                                                     'baz' => 
+                                                     array('baz' => 
+                                                           array('baz' =>
+                                                                 array('baz' => 'baz Value')))))),
+                      'partial' => array('foo' =>
+                                       array('foo' =>
+                                             array('baz' => 
+                                                   array('baz' => 
+                                                         array('baz' =>
+                                                               array('baz' => 'baz Value')))))));
+        return $data;
+    }
+
+    public function testGetValidValuesWithElementsBelongTo()
+    {
+        $data = $this->_setup9350();
+        $this->assertSame($this->form->getValidValues($data['invalid']), $data['partial']);
+    }
+
 
     // Display groups