diff --git a/src/Form.php b/src/Form.php index 937d9265..38183674 100644 --- a/src/Form.php +++ b/src/Form.php @@ -361,7 +361,7 @@ public function bindValues(array $values = [], array $validationGroup = null) // If there is a base fieldset, only hydrate beginning from the base fieldset if ($this->baseFieldset !== null) { - $data = $data[$this->baseFieldset->getName()]; + $data = array_key_exists($this->baseFieldset->getName(), $data) ? $data[$this->baseFieldset->getName()] : []; $this->object = $this->baseFieldset->bindValues($data, $validationGroup[$this->baseFieldset->getName()]); } else { $this->object = parent::bindValues($data, $validationGroup); diff --git a/test/FormTest.php b/test/FormTest.php index 538a23a3..d22d8c79 100644 --- a/test/FormTest.php +++ b/test/FormTest.php @@ -15,11 +15,11 @@ use Zend\Form\Factory; use Zend\Form\Fieldset; use Zend\Form\Form; +use Zend\Hydrator; use Zend\Hydrator\ObjectProperty as ObjectPropertyHydrator; use Zend\InputFilter\BaseInputFilter; -use Zend\InputFilter\InputFilter; use Zend\InputFilter\Factory as InputFilterFactory; -use Zend\Hydrator; +use Zend\InputFilter\InputFilter; use ZendTest\Form\TestAsset\Entity; use ZendTest\Form\TestAsset\HydratorAwareModel; @@ -818,6 +818,35 @@ public function testBindValuesWithWrappingPopulatesBoundObject() ], $model->foobar); } + public function testFormBaseFieldsetBindValuesWithoutInputs() + { + $baseFieldset = new Fieldset('base_fieldset'); + $baseFieldset->setUseAsBaseFieldset(true); + + $form = new Form('default_form'); + $form->add($baseFieldset); + $form->setHydrator(new ObjectPropertyHydrator()); + + $baseFieldsetInputFilter = new InputFilter(); + + $formInputFilter = new InputFilter(); + $formInputFilter->add($baseFieldsetInputFilter, 'base_fieldset'); + + $form->setInputFilter($formInputFilter); + + $model = new stdClass(); + $form->bind($model); + + $data = [ + 'submit' => 'save', + ]; + $form->setData($data); + + $form->isValid(); // Calls ->bindValues after validation (line: 817) + + $this->assertObjectNotHasAttribute('submit', $model); + } + public function testHasFactoryComposedByDefault() { $factory = $this->form->getFormFactory();