File tree Expand file tree Collapse file tree 4 files changed +67
-3
lines changed
src/Symfony/Component/Form
Tests/Extension/Core/Type Expand file tree Collapse file tree 4 files changed +67
-3
lines changed Original file line number Diff line number Diff line change 1818 * Support for data objects that implements both ` Traversable ` and ` ArrayAccess `
1919 in ` ResizeFormListener::preSubmit ` method has been deprecated and will be
2020 removed in Symfony 4.0.
21+ * ` TextType ` now implements ` DataTransformerInterface ` and will always return
22+ an empty string when ` empty_data ` option is explicitly assigned to it.
2123
2224FrameworkBundle
2325---------------
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ CHANGELOG
77 * deprecated the "choices_as_values" option of ChoiceType
88 * deprecated support for data objects that implements both ` Traversable ` and
99 ` ArrayAccess ` in ` ResizeFormListener::preSubmit ` method
10+ * implemented ` DataTransformerInterface ` in ` TextType `
1011
11123.0.0
1213-----
Original file line number Diff line number Diff line change 1212namespace Symfony \Component \Form \Extension \Core \Type ;
1313
1414use Symfony \Component \Form \AbstractType ;
15+ use Symfony \Component \Form \DataTransformerInterface ;
16+ use Symfony \Component \Form \FormBuilderInterface ;
1517use Symfony \Component \OptionsResolver \OptionsResolver ;
1618
17- class TextType extends AbstractType
19+ class TextType extends AbstractType implements DataTransformerInterface
1820{
21+ public function buildForm (FormBuilderInterface $ builder , array $ options )
22+ {
23+ // When empty_data is explicitly set to an empty string,
24+ // a string should always be returned when NULL is submitted
25+ // This gives more control and thus helps preventing some issues
26+ // with PHP 7 which allows type hinting strings in functions
27+ // See https://github.com/symfony/symfony/issues/5906#issuecomment-203189375
28+ if ('' === $ options ['empty_data ' ]) {
29+ $ builder ->addViewTransformer ($ this );
30+ }
31+ }
32+
1933 /**
2034 * {@inheritdoc}
2135 */
@@ -29,8 +43,18 @@ public function configureOptions(OptionsResolver $resolver)
2943 /**
3044 * {@inheritdoc}
3145 */
32- public function getBlockPrefix ()
46+ public function transform ($ data )
47+ {
48+ // Model data should not be transformed
49+ return $ data ;
50+ }
51+
52+ /**
53+ * {@inheritdoc}
54+ *.
55+ */
56+ public function reverseTransform ($ data )
3357 {
34- return ' text ' ;
58+ return empty ( $ data ) ? '' : $ data ;
3559 }
3660}
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ /*
4+ * This file is part of the Symfony package.
5+ *
6+ * (c) Fabien Potencier <fabien@symfony.com>
7+ *
8+ * For the full copyright and license information, please view the LICENSE
9+ * file that was distributed with this source code.
10+ */
11+
12+ namespace Symfony \Component \Form \Tests \Extension \Core \Type ;
13+
14+ use Symfony \Component \Form \Test \TypeTestCase as TestCase ;
15+
16+ class TextTypeTest extends TestCase
17+ {
18
A5E9
+ public function testSubmitNullReturnsNull ()
19+ {
20+ $ form = $ this ->factory ->create ('Symfony\Component\Form\Extension\Core\Type\TextType ' , 'name ' );
21+
22+ $ form ->submit (null );
23+
24+ $ this ->assertNull ($ form ->getData ());
25+ }
26+
27+ public function testSubmitNullReturnsEmptyStringWithEmptyDataAsString ()
28+ {
29+ $ form = $ this ->factory ->create ('Symfony\Component\Form\Extension\Core\Type\TextType ' , 'name ' , array (
30+ 'empty_data ' => '' ,
31+ ));
32+
33+ $ form ->submit (null );
34+
35+ $ this ->assertSame ('' , $ form ->getData ());
36+ }
37+ }
You can’t perform that action at this time.
0 commit comments