Skip to content

Commit 9005c6a

Browse files
Merge branch '3.4'
* 3.4: [TwigBridge] fix BC for FormExtension if renderer is FormRenderer [Form] Fix 5.5 compatibility for ResizeFormListener [BrowserKit] Handle deprecations triggered in insulated requests [Bridge\PhpUnit] Handle deprecations triggered in separate processes Fix LogLevel::DEBUG as min level [Validator] added magic method __isset() to File Constraint class Support array of types in allowed type [DI] Fix possible incorrect php-code when dumped strings contains newlines [Translation] minor: remove unused variable in test added ability to handle parent classes for PropertyNormalizer replace parameters in dummy identity translator never match invalid IP addresses
2 parents 7fdcf54 + 00d3172 commit 9005c6a

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

Extension/Core/EventListener/ResizeFormListener.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,12 @@ public function onSubmit(FormEvent $event)
145145
throw new UnexpectedTypeException($data, 'array or (\Traversable and \ArrayAccess)');
146146
}
147147

148-
if ($entryFilter = $this->deleteEmpty) {
148+
if ($this->deleteEmpty) {
149149
$previousData = $form->getData();
150150
/** @var FormInterface $child */
151151
foreach ($form as $name => $child) {
152152
$isNew = !isset($previousData[$name]);
153-
$isEmpty = is_callable($entryFilter) ? $entryFilter($child->getData()) : $child->isEmpty();
153+
$isEmpty = is_callable($this->deleteEmpty) ? call_user_func($this->deleteEmpty, $child->getData()) : $child->isEmpty();
154154

155155
// $isNew can only be true if allowAdd is true, so we don't
156156
// need to check allowAdd again

Tests/Extension/Core/EventListener/ResizeFormListenerTest.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,4 +275,51 @@ public function testOnSubmitDealsWithArrayBackedIteratorAggregate()
275275
$this->assertArrayNotHasKey(0, $event->getData());
276276
$this->assertArrayNotHasKey(2, $event->getData());
277277
}
278+
279+
public function testOnSubmitDeleteEmptyNotCompoundEntriesIfAllowDelete()
280+
{
281+
$this->form->setData(array('0' => 'first', '1' => 'second'));
282+
$this->form->add($this->getForm('0'));
283+
$this->form->add($this->getForm('1'));
284+
285+
$data = array(0 => 'first', 1 => '');
286+
foreach ($data as $child => $dat) {
287+
$this->form->get($child)->setData($dat);
288+
}
289+
$event = new FormEvent($this->form, $data);
290+
$listener = new ResizeFormListener('text', array(), false, true, true);
291+
$listener->onSubmit($event);
292+
293+
$this->assertEquals(array(0 => 'first'), $event->getData());
294+
}
295+
296+
public function testOnSubmitDeleteEmptyCompoundEntriesIfAllowDelete()
297+
{
298+
$this->form->setData(array('0' => array('name' => 'John'), '1' => array('name' => 'Jane')));
299+
$form1 = $this->getBuilder('0')
300+
->setCompound(true)
301+
->setDataMapper($this->getDataMapper())
302+
->getForm();
303+
$form1->add($this->getForm('name'));
304+
$form2 = $this->getBuilder('1')
305+
->setCompound(true)
306+
->setDataMapper($this->getDataMapper())
307+
->getForm();
308+
$form2->add($this->getForm('name'));
309+
$this->form->add($form1);
310+
$this->form->add($form2);
311+
312+
$data = array('0' => array('name' => 'John'), '1' => array('name' => ''));
313+
foreach ($data as $child => $dat) {
314+
$this->form->get($child)->setData($dat);
315+
}
316+
$event = new FormEvent($this->form, $data);
317+
$callback = function ($data) {
318+
return '' === $data['name'];
319+
};
320+
$listener = new ResizeFormListener('text', array(), false, true, $callback);
321+
$listener->onSubmit($event);
322+
323+
$this->assertEquals(array('0' => array('name' => 'John')), $event->getData());
324+
}
278325
}

0 commit comments

Comments
 (0)