[Form] Allowed binding false to a checkbox.
This commit is contained in:
parent
c04101b4fe
commit
e4939849ab
@ -488,11 +488,14 @@ class Form implements \IteratorAggregate, FormInterface
|
|||||||
$this->setData($this->config->getData());
|
$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
|
// 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
|
// whether an empty value has been submitted or whether no value has
|
||||||
// been submitted at all. This is important for processing checkboxes
|
// been submitted at all. This is important for processing checkboxes
|
||||||
// and radio buttons with empty values.
|
// and radio buttons with empty values.
|
||||||
if (is_scalar($submittedData)) {
|
if (false === $submittedData) {
|
||||||
|
$submittedData = null;
|
||||||
|
} elseif (is_scalar($submittedData)) {
|
||||||
$submittedData = (string) $submittedData;
|
$submittedData = (string) $submittedData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,6 +105,28 @@ class CheckboxTypeTest extends \Symfony\Component\Form\Test\TypeTestCase
|
|||||||
$this->assertNull($form->getViewData());
|
$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
|
* @dataProvider provideTransformedData
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user