Skip to content
This repository was archived by the owner on Jan 30, 2020. It is now read-only.

Commit afa14de

Browse files
committed
Merge branch 'hotfix/216'
Close #216 Fixes #215
2 parents c5dcf6f + bf1494c commit afa14de

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ All notable changes to this project will be documented in this file, in reverse
2222

2323
### Fixed
2424

25+
- [#216](https://github.com/zendframework/zend-form/pull/216) fixes an issue when performing data binding and a fieldset has no mapped
26+
input elements, casting `null` values to empty arrays to ensure they can be
27+
passed to an input filter.
28+
2529
- [#207](https://github.com/zendframework/zend-form/pull/207) fixes the return value annotation for the `Fieldset::get()` method to
2630
indicate it can also return a `FieldsetInterface` instance.
2731

src/Form.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,9 @@ public function bindValues(array $values = [], array $validationGroup = null)
361361

362362
// If there is a base fieldset, only hydrate beginning from the base fieldset
363363
if ($this->baseFieldset !== null) {
364-
$data = $data[$this->baseFieldset->getName()];
364+
$data = array_key_exists($this->baseFieldset->getName(), $data)
365+
? $data[$this->baseFieldset->getName()]
366+
: [];
365367
$this->object = $this->baseFieldset->bindValues($data, $validationGroup[$this->baseFieldset->getName()]);
366368
} else {
367369
$this->object = parent::bindValues($data, $validationGroup);

test/FormTest.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
use Zend\Form\Factory;
1616
use Zend\Form\Fieldset;
1717
use Zend\Form\Form;
18+
use Zend\Hydrator;
1819
use Zend\Hydrator\ObjectProperty as ObjectPropertyHydrator;
1920
use Zend\InputFilter\BaseInputFilter;
20-
use Zend\InputFilter\InputFilter;
2121
use Zend\InputFilter\Factory as InputFilterFactory;
22-
use Zend\Hydrator;
22+
use Zend\InputFilter\InputFilter;
2323
use ZendTest\Form\TestAsset\Entity;
2424
use ZendTest\Form\TestAsset\HydratorAwareModel;
2525

@@ -818,6 +818,28 @@ public function testBindValuesWithWrappingPopulatesBoundObject()
818818
], $model->foobar);
819819
}
820820

821+
public function testFormBaseFieldsetBindValuesWithoutInputs()
822+
{
823+
$baseFieldset = new Fieldset('base_fieldset');
824+
$baseFieldset->setUseAsBaseFieldset(true);
825+
826+
$form = new Form();
827+
$form->add($baseFieldset);
828+
$form->setHydrator(new ObjectPropertyHydrator());
829+
830+
$model = new stdClass();
831+
$form->bind($model);
832+
833+
$data = [
834+
'submit' => 'save',
835+
];
836+
$form->setData($data);
837+
838+
$form->isValid(); // Calls ->bindValues after validation (line: 817)
839+
840+
$this->assertObjectNotHasAttribute('submit', $model);
841+
}
842+
821843
public function testHasFactoryComposedByDefault()
822844
{
823845
$factory = $this->form->getFormFactory();

0 commit comments

Comments
 (0)