From cc01cb1030064d6b61876b7385ae99e52afb8c01 Mon Sep 17 00:00:00 2001 From: David Windell Date: Tue, 19 Feb 2013 11:53:09 +0000 Subject: [PATCH] Allow filter to convert string to array --- library/Zend/Form/Form.php | 2 +- tests/ZendTest/Form/FormTest.php | 21 +++++++++++++++ .../ElementWithStringToArrayFilter.php | 27 +++++++++++++++++++ .../Form/TestAsset/StringToArrayFilter.php | 23 ++++++++++++++++ 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 tests/ZendTest/Form/TestAsset/ElementWithStringToArrayFilter.php create mode 100644 tests/ZendTest/Form/TestAsset/StringToArrayFilter.php diff --git a/library/Zend/Form/Form.php b/library/Zend/Form/Form.php index 02b9f3c3c61..232ac6334b7 100644 --- a/library/Zend/Form/Form.php +++ b/library/Zend/Form/Form.php @@ -321,7 +321,7 @@ protected function prepareBindData(array $values, array $match) continue; } - if (is_array($value)) { + if (is_array($value) && is_array($match[$name])) { $data[$name] = $this->prepareBindData($value, $match[$name]); } else { $data[$name] = $value; diff --git a/tests/ZendTest/Form/FormTest.php b/tests/ZendTest/Form/FormTest.php index 795a0d63e1b..b63a5b11402 100644 --- a/tests/ZendTest/Form/FormTest.php +++ b/tests/ZendTest/Form/FormTest.php @@ -1292,4 +1292,25 @@ public function testCorrectlyHydrateBaseFieldsetWhenHydratorThatDoesNotIgnoreInv // Make sure the object was not hydrated at the "form level" $this->assertFalse(isset($object->submit)); } + + public function testPrepareBindDataAllowsFilterToConvertStringToArray() + { + $data = array( + 'foo' => '1,2', + ); + + $filteredData = array( + 'foo' => array(1, 2) + ); + + $element = new TestAsset\ElementWithStringToArrayFilter('foo'); + $hydrator = $this->getMock('Zend\Stdlib\Hydrator\ArraySerializable'); + $hydrator->expects($this->any())->method('hydrate')->with($filteredData, $this->anything()); + + $this->form->add($element); + $this->form->setHydrator($hydrator); + $this->form->setObject(new stdClass()); + $this->form->setData($data); + $this->form->bindValues($data); + } } diff --git a/tests/ZendTest/Form/TestAsset/ElementWithStringToArrayFilter.php b/tests/ZendTest/Form/TestAsset/ElementWithStringToArrayFilter.php new file mode 100644 index 00000000000..517f4af79a8 --- /dev/null +++ b/tests/ZendTest/Form/TestAsset/ElementWithStringToArrayFilter.php @@ -0,0 +1,27 @@ + $this->getName(), + 'required' => true, + 'filters' => array( + array('name' => 'ZendTest\Form\TestAsset\StringToArrayFilter'), + ), + ); + } +} diff --git a/tests/ZendTest/Form/TestAsset/StringToArrayFilter.php b/tests/ZendTest/Form/TestAsset/StringToArrayFilter.php new file mode 100644 index 00000000000..ebcd87b1599 --- /dev/null +++ b/tests/ZendTest/Form/TestAsset/StringToArrayFilter.php @@ -0,0 +1,23 @@ +