Ver Fonte

ZF-9862: Make sure Subelements BelongsTo is changed when different name is used for addSubForm

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@22217 44c647ce-9c0f-0410-b52a-842ac1e357ba
alab há 15 anos atrás
pai
commit
d9ba025950
2 ficheiros alterados com 16 adições e 0 exclusões
  1. 6 0
      library/Zend/Form.php
  2. 10 0
      tests/Zend/Form/FormTest.php

+ 6 - 0
library/Zend/Form.php

@@ -1579,6 +1579,12 @@ class Zend_Form implements Iterator, Countable, Zend_Validate_Interface
             $form->setOrder($order);
         }
 
+        if (($oldName = $form->getName()) &&
+            $oldName !== $name &&
+            $oldName === $form->getElementsBelongTo()) {
+            $form->setElementsBelongTo($name);
+        }
+
         $form->setName($name);
         $this->_subForms[$name] = $form;
         $this->_order[$name]    = $order;

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

@@ -1224,6 +1224,16 @@ class Zend_Form_FormTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('page1', $subForm->getName());
     }
 
+    public function testAddingSubFormResetsBelongsToWithDifferentSubFormName()
+    {
+        $subForm = new Zend_Form_SubForm;
+        $subForm->setName('quo')
+                ->addElement('text', 'foo');
+        $this->form->addSubForm($subForm, 'bar');
+        $this->assertEquals('bar', $subForm->foo->getBelongsTo());
+    }
+
+
     public function testGetSubFormReturnsNullForUnregisteredSubForm()
     {
         $this->assertNull($this->form->getSubForm('foo'));