[Form] Allowed binding false to a checkbox.

This commit is contained in:
Jakub Zalas 2013-04-22 13:33:42 +01:00
parent c04101b4fe
commit e4939849ab
2 changed files with 26 additions and 1 deletions

View File

@ -488,11 +488,14 @@ class Form implements \IteratorAggregate, FormInterface
$this->setData($this->config->getData());
}
// Treat false as NULL to support binding false to checkboxes.
// Don't convert NULL to a string here in order to determine later
// whether an empty value has been submitted or whether no value has
// been submitted at all. This is important for processing checkboxes
// and radio buttons with empty values.
if (is_scalar($submittedData)) {
if (false === $submittedData) {
$submittedData = null;
} elseif (is_scalar($submittedData)) {
$submittedData = (string) $submittedData;
}

View File

@ -105,6 +105,28 @@ class CheckboxTypeTest extends \Symfony\Component\Form\Test\TypeTestCase
$this->assertNull($form->getViewData());
}
public function testBindWithEmptyValueAndFalseUnchecked()
{
$form = $this->factory->create('checkbox', null, array(
'value' => '',
));
$form->bind(false);
$this->assertFalse($form->getData());
$this->assertNull($form->getViewData());
}
public function testBindWithEmptyValueAndTrueChecked()
{
$form = $this->factory->create('checkbox', null, array(
'value' => '',
));
$form->bind(true);
$this->assertTrue($form->getData());
$this->assertSame('', $form->getViewData());
}
/**
* @dataProvider provideTransformedData
*/