diff --git a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php index 1465551b906a6..fb563a41c8388 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php @@ -325,7 +325,9 @@ public function configureOptions(OptionsResolver $resolver) if (!is_object($options['empty_value']) || !$options['empty_value'] instanceof \Exception) { @trigger_error('The form option "empty_value" is deprecated since version 2.6 and will be removed in 3.0. Use "placeholder" instead.', E_USER_DEPRECATED); - $placeholder = $options['empty_value']; + if (null === $placeholder || '' === $placeholder) { + $placeholder = $options['empty_value']; + } } if ($options['multiple']) { diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/ChoiceTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/ChoiceTypeTest.php index b404405d191d4..ed64858bd570e 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/ChoiceTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/ChoiceTypeTest.php @@ -1637,7 +1637,7 @@ public function testPassPlaceholderToView($multiple, $expanded, $required, $plac )); $view = $form->createView(); - $this->assertEquals($viewValue, $view->vars['placeholder']); + $this->assertSame($viewValue, $view->vars['placeholder']); $this->assertFalse($view->vars['placeholder_in_choices']); } @@ -1657,9 +1657,9 @@ public function testPassEmptyValueBC($multiple, $expanded, $required, $placehold )); $view = $form->createView(); - $this->assertEquals($viewValue, $view->vars['placeholder']); + $this->assertSame($viewValue, $view->vars['placeholder']); $this->assertFalse($view->vars['placeholder_in_choices']); - $this->assertEquals($viewValue, $view->vars['empty_value']); + $this->assertSame($viewValue, $view->vars['empty_value']); $this->assertFalse($view->vars['empty_value_in_choices']); } @@ -1726,6 +1726,134 @@ public function getOptionsWithPlaceholder() ); } + /** + * @dataProvider getOptionsWithPlaceholderAndEmptyValue + * @group legacy + */ + public function testPlaceholderOptionWithEmptyValueOption($multiple, $expanded, $required, $placeholder, $emptyValue, $viewValue) + { + $form = $this->factory->create('choice', null, array( + 'multiple' => $multiple, + 'expanded' => $expanded, + 'required' => $required, + 'placeholder' => $placeholder, + 'empty_value' => $emptyValue, + 'choices' => $this->choices, + )); + $view = $form->createView(); + + $this->assertSame($viewValue, $view->vars['placeholder']); + $this->assertFalse($view->vars['placeholder_in_choices']); + } + + public function getOptionsWithPlaceholderAndEmptyValue() + { + return array( + // single non-expanded, not required + 'A placeholder is not used if it is explicitly set to false' => array(false, false, false, false, false, null), + 'A placeholder is not used if it is explicitly set to false' => array(false, false, false, false, null, null), + 'A placeholder is not used if it is explicitly set to false' => array(false, false, false, false, '', null), + 'A placeholder is not used if it is explicitly set to false' => array(false, false, false, false, 'bar', null), + 'A placeholder is not used if empty_value is set to false [maintains BC]' => array(false, false, false, null, false, null), + 'An unset empty_value is automaticaly made an empty string in a non-required field (but null is expected here) [maintains BC]' => array(false, false, false, null, null, ''), + 'An empty string empty_value is used if placeholder is not set [maintains BC]' => array(false, false, false, null, '', ''), + 'A non-empty string empty_value is used if placeholder is not set [maintains BC]' => array(false, false, false, null, 'bar', 'bar'), + 'A placeholder is not used if it is an empty string and empty_value is set to false [maintains BC]' => array(false, false, false, '', false, null), + 'An unset empty_value is automatically made an empty string in a non-required field (but null is expected here) [maintains BC]' => array(false, false, false, '', null, null), + 'An empty string empty_value is used if placeholder is also an empty string [maintains BC]' => array(false, false, false, '', '', ''), + 'A non-empty string empty_value is used if placeholder is an empty string [maintains BC]' => array(false, false, false, '', 'bar', 'bar'), + 'A non-empty string placeholder takes precedence over an empty_value set to false' => array(false, false, false, 'foo', false, 'foo'), + 'A non-empty string placeholder takes precendece over a not set empty_value' => array(false, false, false, 'foo', null, 'foo'), + 'A non-empty string placeholder takes precedence over an empty string empty_value' => array(false, false, false, 'foo', '', 'foo'), + 'A non-empty string placeholder takes precedence over a non-empty string empty_value' => array(false, false, false, 'foo', 'bar', 'foo'), + // single non-expanded, required + 'A placeholder is not used if it is explicitly set to false' => array(false, false, true, false, false, null), + 'A placeholder is not used if it is explicitly set to false' => array(false, false, true, false, null, null), + 'A placeholder is not used if it is explicitly set to false' => array(false, false, true, false, '', null), + 'A placeholder is not used if it is explicitly set to false' => array(false, false, true, false, 'bar', null), + 'A placeholder is not used if empty_value is set to false [maintains BC]' => array(false, false, true, null, false, null), + 'A placeholder is not used if empty_value is not set [maintains BC]' => array(false, false, true, null, null, null), + 'An empty string empty_value is used if placeholder is not set [maintains BC]' => array(false, false, true, null, '', ''), + 'A non-empty string empty_value is used if placeholder is not set [maintains BC]' => array(false, false, true, null, 'bar', 'bar'), + 'A placeholder is not used if it is an empty string and empty_value is set to false [maintains BC]' => array(false, false, true, '', false, null), + 'A placeholder is not used if empty_value is not set [maintains BC]' => array(false, false, true, '', null, null), + 'An empty string empty_value is used if placeholder is also an empty string [maintains BC]' => array(false, false, true, '', '', ''), + 'A non-empty string empty_value is used if placeholder is an empty string [maintains BC]' => array(false, false, true, '', 'bar', 'bar'), + 'A non-empty string placeholder takes precedence over an empty_value set to false' => array(false, false, true, 'foo', false, 'foo'), + 'A non-empty string placeholder takes precendece over a not set empty_value' => array(false, false, true, 'foo', null, 'foo'), + 'A non-empty string placeholder takes precedence over an empty string empty_value' => array(false, false, true, 'foo', '', 'foo'), + 'A non-empty string placeholder takes precedence over a non-empty string empty_value' => array(false, false, true, 'foo', 'bar', 'foo'), + // single expanded, not required + 'A placeholder is not used if it is explicitly set to false' => array(false, true, false, false, false, null), + 'A placeholder is not used if it is explicitly set to false' => array(false, true, false, false, null, null), + 'A placeholder is not used if it is explicitly set to false' => array(false, true, false, false, '', null), + 'A placeholder is not used if it is explicitly set to false' => array(false, true, false, false, 'bar', null), + 'A placeholder is not used if empty_value is set to false [maintains BC]' => array(false, true, false, null, false, null), + 'An unset empty_value is automaticaly made an empty string in a non-required field (but null is expected here) [maintains BC]' => array(false, true, false, null, null, null), + 'An empty string empty_value is converted to "None" in an expanded single choice field [maintains BC]' => array(false, true, false, null, '', 'None'), + 'A non-empty string empty_value is used if placeholder is not set [maintains BC]' => array(false, true, false, null, 'bar', 'bar'), + 'A placeholder is not used if it is an empty string and empty_value is set to false [maintains BC]' => array(false, true, false, '', false, null), + 'An unset empty_value is automatically made an empty string in a non-required field (but null is expected here) [maintains BC]' => array(false, true, false, '', null, null), + 'An empty string empty_value is converted to "None" in an expanded single choice field [maintains BC]' => array(false, true, false, '', '', 'None'), + 'A non-empty string empty_value is used if placeholder is an empty string [maintains BC]' => array(false, true, false, '', 'bar', 'bar'), + 'A non-empty string placeholder takes precedence over an empty_value set to false' => array(false, true, false, 'foo', false, 'foo'), + 'A non-empty string placeholder takes precendece over a not set empty_value' => array(false, true, false, 'foo', null, 'foo'), + 'A non-empty string placeholder takes precedence over an empty string empty_value' => array(false, true, false, 'foo', '', 'foo'), + 'A non-empty string placeholder takes precedence over a non-empty string empty_value' => array(false, true, false, 'foo', 'bar', 'foo'), + // single expanded, required + 'A placeholder is not used if it is explicitly set to false' => array(false, true, true, false, false, null), + 'A placeholder is not used if it is explicitly set to false' => array(false, true, true, false, null, null), + 'A placeholder is not used if it is explicitly set to false' => array(false, true, true, false, '', null), + 'A placeholder is not used if it is explicitly set to false' => array(false, true, true, false, 'bar', null), + 'A placeholder is not used if empty_value is set to false [maintains BC]' => array(false, true, true, null, false, null), + 'A placeholder is not used if empty_value is not set [maintains BC]' => array(false, true, true, null, null, null), + 'An empty string empty_value is converted to "None" in an expanded single choice field [maintains BC]' => array(false, true, true, null, '', 'None'), + 'A non-empty string empty_value is used if placeholder is not set [maintains BC]' => array(false, true, true, null, 'bar', 'bar'), + 'A placeholder is not used if it is an empty string and empty_value is set to false [maintains BC]' => array(false, true, true, '', false, null), + 'A placeholder is not used if empty_value is not set [maintains BC]' => array(false, true, true, '', null, null), + 'An empty string empty_value is converted to "None" in an expanded single choice field [maintains BC]' => array(false, true, true, '', '', 'None'), + 'A non-empty string empty_value is used if placeholder is an empty string [maintains BC]' => array(false, true, true, '', 'bar', 'bar'), + 'A non-empty string placeholder takes precedence over an empty_value set to false' => array(false, true, true, 'foo', false, 'foo'), + 'A non-empty string placeholder takes precendece over a not set empty_value' => array(false, true, true, 'foo', null, 'foo'), + 'A non-empty string placeholder takes precedence over an empty string empty_value' => array(false, true, true, 'foo', '', 'foo'), + 'A non-empty string placeholder takes precedence over a non-empty string empty_value' => array(false, true, true, 'foo', 'bar', 'foo'), + // multiple expanded, not required + array(true, true, false, false, false, null), + array(true, true, false, false, null, null), + array(true, true, false, false, '', null), + array(true, true, false, false, 'bar', null), + array(true, true, false, null, false, null), + array(true, true, false, null, null, null), + array(true, true, false, null, '', null), + array(true, true, false, null, 'bar', null), + array(true, true, false, '', false, null), + array(true, true, false, '', null, null), + array(true, true, false, '', '', null), + array(true, true, false, '', 'bar', null), + array(true, true, false, 'foo', false, null), + array(true, true, false, 'foo', null, null), + array(true, true, false, 'foo', '', null), + array(true, true, false, 'foo', 'bar', null), + // multiple expanded, required + array(true, true, true, false, false, null), + array(true, true, true, false, null, null), + array(true, true, true, false, '', null), + array(true, true, true, false, 'bar', null), + array(true, true, true, null, false, null), + array(true, true, true, null, null, null), + array(true, true, true, null, '', null), + array(true, true, true, null, 'bar', null), + array(true, true, true, '', false, null), + array(true, true, true, '', null, null), + array(true, true, true, '', '', null), + array(true, true, true, '', 'bar', null), + array(true, true, true, 'foo', false, null), + array(true, true, true, 'foo', null, null), + array(true, true, true, 'foo', '', null), + array(true, true, true, 'foo', 'bar', null), + ); + } + public function testPassChoicesToView() { $choices = array('A' => 'a', 'B' => 'b', 'C' => 'c', 'D' => 'd');
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: