File tree 4 files changed +73
-1
lines changed
src/Symfony/Component/Form
Tests/Extension/Core/Type
4 files changed +73
-1
lines changed Original file line number Diff line number Diff line change 18
18
* Support for data objects that implements both ` Traversable ` and ` ArrayAccess `
19
19
in ` ResizeFormListener::preSubmit ` method has been deprecated and will be
20
20
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.
21
23
22
24
FrameworkBundle
23
25
---------------
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ CHANGELOG
7
7
* deprecated the "choices_as_values" option of ChoiceType
8
8
* deprecated support for data objects that implements both ` Traversable ` and
9
9
` ArrayAccess ` in ` ResizeFormListener::preSubmit ` method
10
+ * implemented ` DataTransformerInterface ` in ` TextType `
10
11
11
12
3.0.0
12
13
-----
Original file line number Diff line number Diff line change 12
12
namespace Symfony \Component \Form \Extension \Core \Type ;
13
13
14
14
use Symfony \Component \Form \AbstractType ;
15
+ use Symfony \Component \Form \DataTransformerInterface ;
16
+ use Symfony \Component \Form \FormBuilderInterface ;
15
17
use Symfony \Component \OptionsResolver \OptionsResolver ;
16
18
17
- class TextType extends AbstractType
19
+ class TextType extends AbstractType implements DataTransformerInterface
18
20
{
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
+
19
33
/**
20
34
* {@inheritdoc}
21
35
*/
@@ -33,4 +47,22 @@ public function getBlockPrefix()
33
47
{
34
48
return 'text ' ;
35
49
}
50
+
51
+ /**
52
+ * {@inheritdoc}
53
+ */
54
+ public function transform ($ data )
55
+ {
56
+ // Model data should not be transformed
57
+ return $ data ;
58
+ }
59
+
60
+ /**
61
+ * {@inheritdoc}
62
+ *.
63
+ */
64
+ public function reverseTransform ($ data )
65
+ {
66
+ return empty ($ data ) ? '' : $ data ;
67
+ }
36
68
}
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
+ 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