diff --git a/library/Zend/Form/Fieldset.php b/library/Zend/Form/Fieldset.php index 3200996905b..d9a5b4c8d9a 100644 --- a/library/Zend/Form/Fieldset.php +++ b/library/Zend/Form/Fieldset.php @@ -570,7 +570,6 @@ public function allowValueBinding() */ public function bindValues(array $values = array()) { - $objectData = $this->extract(); $hydrator = $this->getHydrator(); $hydratableData = array(); @@ -588,8 +587,6 @@ public function bindValues(array $values = array()) // skip post values for disabled elements, get old value from object if(!$element->hasAttribute('disabled')) { $hydratableData[$name] = $value; - } elseif(array_key_exists($name, $objectData)) { - $hydratableData[$name] = $objectData[$name]; } } diff --git a/tests/ZendTest/Form/FieldsetTest.php b/tests/ZendTest/Form/FieldsetTest.php index 3281e9cd23a..4f4248426b1 100644 --- a/tests/ZendTest/Form/FieldsetTest.php +++ b/tests/ZendTest/Form/FieldsetTest.php @@ -14,6 +14,7 @@ use Zend\Form\Form; use Zend\Form\Fieldset; use Zend\InputFilter\InputFilter; +use Zend\Stdlib\Hydrator; class FieldsetTest extends TestCase { @@ -522,4 +523,27 @@ public function testShouldValidateAllowObjectBindingByObject() $this->assertTrue($allowed); } + /** + * @group 6645 + */ + public function testBindValuesPreservesNewValueAfterValidation() + { + $form = new Form(); + $form->add(new Element('foo')); + $form->setHydrator(new Hydrator\ObjectProperty); + + $object = new \stdClass(); + $object->foo = 'Initial value'; + $form->bind($object); + + $form->setData(array( + 'foo' => 'New value' + )); + + $this->assertSame('New value', $form->get('foo')->getValue()); + + $form->isValid(); + + $this->assertSame('New value', $form->get('foo')->getValue()); + } }