diff --git a/src/Symfony/Component/Form/Extension/Core/EventListener/ResizeFormListener.php b/src/Symfony/Component/Form/Extension/Core/EventListener/ResizeFormListener.php index d2b13e4a96..f1c39db245 100644 --- a/src/Symfony/Component/Form/Extension/Core/EventListener/ResizeFormListener.php +++ b/src/Symfony/Component/Form/Extension/Core/EventListener/ResizeFormListener.php @@ -139,21 +139,9 @@ class ResizeFormListener implements EventSubscriberInterface // The data mapper only adds, but does not remove items, so do this // here if ($this->allowDelete) { - if ($data instanceof \IteratorAggregate) { - $iter = $data->getIterator(); - while ($iter->valid()) { - $name = $iter->key(); - if ($form->has($name)) { - $iter->next(); - } else { - $iter->offsetUnset($name); - } - } - } else { - foreach ($data as $name => $child) { - if (!$form->has($name)) { - unset($data[$name]); - } + foreach ($data as $name => $child) { + if (!$form->has($name)) { + unset($data[$name]); } } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/ResizeFormListenerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/ResizeFormListenerTest.php index 1367b3ef02..3c162654dd 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/ResizeFormListenerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/EventListener/ResizeFormListenerTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Form\Tests\Extension\Core\EventListener; +use Doctrine\Common\Collections\ArrayCollection; use Symfony\Component\Form\Extension\Core\EventListener\ResizeFormListener; use Symfony\Component\Form\FormBuilder; use Symfony\Component\Form\FormEvent; @@ -252,4 +253,17 @@ class ResizeFormListenerTest extends \PHPUnit_Framework_TestCase $this->assertEquals(array(), $event->getData()); } + + public function testOnSubmitDealsWithIteratorAggregate() + { + $this->form->add($this->getForm('1')); + + $data = new ArrayCollection(array(0 => 'first', 1 => 'second', 2 => 'third')); + $event = new FormEvent($this->form, $data); + $listener = new ResizeFormListener('text', array(), false, true); + $listener->onSubmit($event); + + $this->assertArrayNotHasKey(0, $event->getData()); + $this->assertArrayNotHasKey(2, $event->getData()); + } }