diff --git a/UPGRADE-4.2.md b/UPGRADE-4.2.md index e7382e4b3d..da79da9b3c 100644 --- a/UPGRADE-4.2.md +++ b/UPGRADE-4.2.md @@ -55,6 +55,8 @@ Finder Form ---- + * The `$scale` argument of the `IntegerToLocalizedStringTransformer` is deprecated. + * Deprecated calling `FormRenderer::searchAndRenderBlock` for fields which were already rendered. Instead of expecting such calls to return empty strings, check if the field has already been rendered. diff --git a/UPGRADE-5.0.md b/UPGRADE-5.0.md index 49ec7e39a8..cdcc7d6f18 100644 --- a/UPGRADE-5.0.md +++ b/UPGRADE-5.0.md @@ -64,6 +64,11 @@ EventDispatcher * The `TraceableEventDispatcherInterface` has been removed. +Form +---- + + * The `$scale` argument of the `IntegerToLocalizedStringTransformer` was removed. + Finder ------ diff --git a/src/Symfony/Component/Form/CHANGELOG.md b/src/Symfony/Component/Form/CHANGELOG.md index 1f59b5398a..3b6f30db8d 100644 --- a/src/Symfony/Component/Form/CHANGELOG.md +++ b/src/Symfony/Component/Form/CHANGELOG.md @@ -4,6 +4,7 @@ CHANGELOG 4.2.0 ----- + * deprecated the `$scale` argument of the `IntegerToLocalizedStringTransformer` * added `Symfony\Component\Form\ClearableErrorsInterface` * deprecated calling `FormRenderer::searchAndRenderBlock` for fields which were already rendered diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php index 301ead682b..e4f077d277 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php @@ -22,12 +22,18 @@ class IntegerToLocalizedStringTransformer extends NumberToLocalizedStringTransfo /** * Constructs a transformer. * - * @param int $scale Unused * @param bool $grouping Whether thousands should be grouped * @param int $roundingMode One of the ROUND_ constants in this class */ - public function __construct(?int $scale = 0, ?bool $grouping = false, int $roundingMode = self::ROUND_DOWN) + public function __construct($grouping = false, $roundingMode = self::ROUND_DOWN) { + if (\is_int($grouping) || \is_bool($roundingMode) || 2 < \func_num_args()) { + @trigger_error(sprintf('Passing a precision as the first value to %s::__construct() is deprecated since Symfony 4.2 and support for it will be dropped in 5.0.', __CLASS__), E_USER_DEPRECATED); + + $grouping = $roundingMode; + $roundingMode = 2 < \func_num_args() ? func_get_arg(2) : self::ROUND_DOWN; + } + parent::__construct(0, $grouping, $roundingMode); } diff --git a/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php b/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php index 4051cbf23d..0fab0eb1be 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php @@ -23,12 +23,7 @@ class IntegerType extends AbstractType */ public function buildForm(FormBuilderInterface $builder, array $options) { - $builder->addViewTransformer( - new IntegerToLocalizedStringTransformer( - $options['scale'], - $options['grouping'], - $options['rounding_mode'] - )); + $builder->addViewTransformer(new IntegerToLocalizedStringTransformer($options['grouping'], $options['rounding_mode'])); } /** diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformerTest.php index fe1f7d3179..566d272816 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformerTest.php @@ -79,6 +79,18 @@ class IntegerToLocalizedStringTransformerTest extends TestCase * @dataProvider transformWithRoundingProvider */ public function testTransformWithRounding($input, $output, $roundingMode) + { + $transformer = new IntegerToLocalizedStringTransformer(null, $roundingMode); + + $this->assertEquals($output, $transformer->transform($input)); + } + + /** + * @group legacy + * @expectedDeprecation Passing a precision as the first value to %s::__construct() is deprecated since Symfony 4.2 and support for it will be dropped in 5.0. + * @dataProvider transformWithRoundingProvider + */ + public function testTransformWithRoundingUsingLegacyConstructorSignature($input, $output, $roundingMode) { $transformer = new IntegerToLocalizedStringTransformer(null, null, $roundingMode); @@ -114,6 +126,25 @@ class IntegerToLocalizedStringTransformerTest extends TestCase \Locale::setDefault('de_DE'); + $transformer = new IntegerToLocalizedStringTransformer(true); + + $this->assertEquals(1234, $transformer->reverseTransform('1.234,5')); + $this->assertEquals(12345, $transformer->reverseTransform('12.345,912')); + $this->assertEquals(1234, $transformer->reverseTransform('1234,5')); + $this->assertEquals(12345, $transformer->reverseTransform('12345,912')); + } + + /** + * @group legacy + * @expectedDeprecation Passing a precision as the first value to %s::__construct() is deprecated since Symfony 4.2 and support for it will be dropped in 5.0. + */ + public function testReverseTransformWithGroupingUsingLegacyConstructorSignature() + { + // Since we test against "de_DE", we need the full implementation + IntlTestHelper::requireFullIntl($this, false); + + \Locale::setDefault('de_DE'); + $transformer = new IntegerToLocalizedStringTransformer(null, true); $this->assertEquals(1234, $transformer->reverseTransform('1.234,5')); @@ -177,6 +208,18 @@ class IntegerToLocalizedStringTransformerTest extends TestCase * @dataProvider reverseTransformWithRoundingProvider */ public function testReverseTransformWithRounding($input, $output, $roundingMode) + { + $transformer = new IntegerToLocalizedStringTransformer(null, $roundingMode); + + $this->assertEquals($output, $transformer->reverseTransform($input)); + } + + /** + * @group legacy + * @expectedDeprecation Passing a precision as the first value to %s::__construct() is deprecated since Symfony 4.2 and support for it will be dropped in 5.0. + * @dataProvider reverseTransformWithRoundingProvider + */ + public function testReverseTransformWithRoundingUsingLegacyConstructorSignature($input, $output, $roundingMode) { $transformer = new IntegerToLocalizedStringTransformer(null, null, $roundingMode);