[Form] [ChoiceType] Prefer placeholder to empty_value
This commit is contained in:
parent
d222bd3213
commit
a4d4c8aa0f
@ -325,7 +325,9 @@ class ChoiceType extends AbstractType
|
||||
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']) {
|
||||
|
@ -1637,7 +1637,7 @@ class ChoiceTypeTest extends \Symfony\Component\Form\Test\TypeTestCase
|
||||
));
|
||||
$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 @@ class ChoiceTypeTest extends \Symfony\Component\Form\Test\TypeTestCase
|
||||
));
|
||||
$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 @@ class ChoiceTypeTest extends \Symfony\Component\Form\Test\TypeTestCase
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @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');
|
||||
|
Reference in New Issue
Block a user