bug #26932 [Form] Fixed trimming choice values (HeahDude)

This PR was merged into the 2.7 branch.

Discussion
----------

[Form] Fixed trimming choice values

| Q             | A
| ------------- | ---
| Branch?       | 2.7
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #24247, #24712
| License       | MIT
| Doc PR        | symfony/symfony-docs#9598

Follows #24712 discussion.

Commits
-------

00cdf5e0a5 [Form] Fixed trimming choice values
This commit is contained in:
Fabien Potencier 2018-04-16 19:16:07 +02:00
commit a3af3d3ec2
2 changed files with 56 additions and 0 deletions

View File

@ -413,6 +413,7 @@ class ChoiceType extends AbstractType
// See https://github.com/symfony/symfony/pull/5582
'data_class' => null,
'choice_translation_domain' => true,
'trim' => false,
));
$resolver->setNormalizer('choices', $choicesNormalizer);

View File

@ -2421,4 +2421,59 @@ class ChoiceTypeTest extends BaseTypeTest
'multiple, expanded' => array(true, true, array(array())),
);
}
/**
* @dataProvider provideTrimCases
*/
public function testTrimIsDisabled($multiple, $expanded)
{
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'multiple' => $multiple,
'expanded' => $expanded,
'choices' => array(
'a' => '1',
),
'choices_as_values' => true,
));
$submittedData = ' 1';
$form->submit($multiple ? (array) $submittedData : $submittedData);
// When the choice does not exist the transformation fails
$this->assertFalse($form->isSynchronized());
$this->assertNull($form->getData());
}
/**
* @dataProvider provideTrimCases
*/
public function testSubmitValueWithWhiteSpace($multiple, $expanded)
{
$valueWhitWhiteSpace = '1 ';
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'multiple' => $multiple,
'expanded' => $expanded,
'choices' => array(
'a' => $valueWhitWhiteSpace,
),
'choices_as_values' => true,
));
$form->submit($multiple ? (array) $valueWhitWhiteSpace : $valueWhitWhiteSpace);
$this->assertTrue($form->isSynchronized());
$this->assertSame($multiple ? (array) $valueWhitWhiteSpace : $valueWhitWhiteSpace, $form->getData());
}
public function provideTrimCases()
{
return array(
'Simple' => array(false, false),
'Multiple' => array(true, false),
'Simple expanded' => array(false, true),
'Multiple expanded' => array(true, true),
);
}
}