Просмотр исходного кода

ZF-9361: correct populate/setDefaults to respect elementsBelongTo

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21701 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 16 лет назад
Родитель
Сommit
e174b3888c
2 измененных файлов с 23 добавлено и 1 удалено
  1. 4 1
      library/Zend/Form.php
  2. 19 0
      tests/Zend/Form/FormTest.php

+ 4 - 1
library/Zend/Form.php

@@ -1226,13 +1226,16 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
      */
     public function setDefaults(array $defaults)
     {
+        if ($this->isArray()) {
+            $defaults = $this->_dissolveArrayValue($defaults, $this->getElementsBelongTo());
+        }
         foreach ($this->getElements() as $name => $element) {
             if (array_key_exists($name, $defaults)) {
                 $this->setDefault($name, $defaults[$name]);
             }
         }
         foreach ($this->getSubForms() as $name => $form) {
-            if (array_key_exists($name, $defaults)) {
+            if (!$form->isArray() && array_key_exists($name, $defaults)) {
                 $form->setDefaults($defaults[$name]);
             } else {
                 $form->setDefaults($defaults);

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

@@ -1509,6 +1509,25 @@ class Zend_Form_FormTest extends PHPUnit_Framework_TestCase
         $this->assertTrue($this->form->isValidPartial($foo));
     } 
 
+    public function testPopulateWithElementsBelongTo()
+    {
+        $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 = array('foo' =>
+                     array('foo' =>
+                           array('foo' =>
+                                 array('foo' => 'foo Value'))));
+
+        $this->form->setView($this->getView())
+                   ->populate($foo);
+
+        $this->assertRegexp('/value=.foo Value./', $this->form->render());
+    }
+
 
     // Display groups