From 264b0ccb4d0722dbbcb8b81f4b8f64baf60f7b0b Mon Sep 17 00:00:00 2001 From: werequireevenmoreminerals Date: Thu, 21 Feb 2019 11:45:05 +0100 Subject: [PATCH 1/4] fixed "__clone method called on non-object" if there's no targetElement --- src/Element/Collection.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Element/Collection.php b/src/Element/Collection.php index 6023305a..11cea3ec 100644 --- a/src/Element/Collection.php +++ b/src/Element/Collection.php @@ -227,7 +227,7 @@ public function populateValues($data) foreach ($data as $key => $value) { if ($this->has($key)) { $elementOrFieldset = $this->get($key); - } else { + } elseif ($this->targetElement) { $elementOrFieldset = $this->addNewTargetElementInstance($key); if ($key > $this->lastChildIndex) { @@ -235,10 +235,12 @@ public function populateValues($data) } } - if ($elementOrFieldset instanceof FieldsetInterface) { - $elementOrFieldset->populateValues($value); - } else { - $elementOrFieldset->setAttribute('value', $value); + if ($elementOrFieldset) { + if ($elementOrFieldset instanceof FieldsetInterface) { + $elementOrFieldset->populateValues($value); + } else { + $elementOrFieldset->setAttribute('value', $value); + } } } From cefeeaa210c07c7473a8cf60d83f77a073fe1b81 Mon Sep 17 00:00:00 2001 From: werequireevenmoreminerals Date: Thu, 21 Feb 2019 11:51:32 +0100 Subject: [PATCH 2/4] changelog entry --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe228174..fec6d251 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ All notable changes to this project will be documented in this file, in reverse ### Fixed -- Nothing. +- [#230](https://github.com/zendframework/zend-form/pull/230) fixes the "__clone method called on non-object" error that happens when the targetElement is null. ## 2.14.0 - 2019-01-07 From f0929507288bc7061cbf9551511e4f993e59d39f Mon Sep 17 00:00:00 2001 From: werequireevenmoreminerals Date: Thu, 21 Feb 2019 12:25:06 +0100 Subject: [PATCH 3/4] fixed initial value not being present and causing issues --- src/Element/Collection.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Element/Collection.php b/src/Element/Collection.php index 11cea3ec..87084566 100644 --- a/src/Element/Collection.php +++ b/src/Element/Collection.php @@ -225,6 +225,7 @@ public function populateValues($data) } foreach ($data as $key => $value) { + $elementOrFieldset = null; if ($this->has($key)) { $elementOrFieldset = $this->get($key); } elseif ($this->targetElement) { From ce463ae2bdeea845c02a76a5d27988425116f719 Mon Sep 17 00:00:00 2001 From: werequireevenmoreminerals Date: Thu, 21 Feb 2019 12:25:28 +0100 Subject: [PATCH 4/4] regression test for pull request #230 --- test/Element/CollectionTest.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/Element/CollectionTest.php b/test/Element/CollectionTest.php index b3039a13..2d0e0346 100644 --- a/test/Element/CollectionTest.php +++ b/test/Element/CollectionTest.php @@ -1398,4 +1398,25 @@ public function testGetErrorMessagesForInvalidCollectionElements() $this->form->getMessages() ); } + + public function testTargetElementBeingNullNotCausingAnError() + { + $form = new Form(); + + $form->add([ + 'type' => 'Zend\Form\Element\Collection', + 'name' => 'fieldsets', + 'options' => [ + 'count' => 2 + ] + ]); + + $collection = $form->get('fieldsets'); + $data = []; + $data['fieldsets'] = ['red', 'green', 'blue']; + + $form->populateValues($data); + + $this->addToAssertionCount(1); // expect no exception being thrown + } }