Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 50f2529

Browse filesBrowse files
committed
feature #18357 [Form] Let TextType implement DataTransformerInterface (HeahDude)
This PR was merged into the 3.1-dev branch. Discussion ---------- [Form] Let `TextType` implement `DataTransformerInterface` | Q | A | ------------- | --- | Branch? | master | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #5906 | License | MIT | Doc PR | ~ Commits ------- 7e97fbb [Form] let `TextType` implements `DataTransformerInterface`
2 parents 461e871 + 7e97fbb commit 50f2529
Copy full SHA for 50f2529

File tree

4 files changed

+73
-2
lines changed
Filter options

4 files changed

+73
-2
lines changed

‎UPGRADE-3.1.md

Copy file name to clipboardExpand all lines: UPGRADE-3.1.md
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ Form
1919
* Support for data objects that implements both `Traversable` and `ArrayAccess`
2020
in `ResizeFormListener::preSubmit` method has been deprecated and will be
2121
removed in Symfony 4.0.
22+
* `TextType` now implements `DataTransformerInterface` and will always return
23+
an empty string when `empty_data` option is explicitly assigned to it.
2224

2325
* Using callable strings as choice options in ChoiceType has been deprecated
2426
in favor of `PropertyPath` in Symfony 4.0 use a "\Closure" instead.

‎src/Symfony/Component/Form/CHANGELOG.md

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/CHANGELOG.md
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ 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-
1110
* Using callable strings as choice options in `ChoiceType` has been deprecated
1211
and will be used as `PropertyPath` instead of callable in Symfony 4.0.
12+
* implemented `DataTransformerInterface` in `TextType`
1313

1414
3.0.0
1515
-----

‎src/Symfony/Component/Form/Extension/Core/Type/TextType.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Extension/Core/Type/TextType.php
+33-1Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,24 @@
1212
namespace Symfony\Component\Form\Extension\Core\Type;
1313

1414
use Symfony\Component\Form\AbstractType;
15+
use Symfony\Component\Form\DataTransformerInterface;
16+
use Symfony\Component\Form\FormBuilderInterface;
1517
use 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
*/
@@ -33,4 +47,22 @@ public function getBlockPrefix()
3347
{
3448
return 'text';
3549
}
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 null === $data ? '' : $data;
67+
}
3668
}
+37Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.