Skip to content

Commit 2a2f7e2

Browse files
committed
Deprecated precision option in favor of scale
1 parent a630d87 commit 2a2f7e2

13 files changed

+116
-38
lines changed

UPGRADE-3.0.md

+18
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,24 @@ UPGRADE FROM 2.x to 3.0
106106

107107
### Form
108108

109+
* The option "precision" was renamed to "scale".
110+
111+
Before:
112+
113+
```php
114+
$builder->add('length', 'number', array(
115+
'precision' => 3,
116+
));
117+
```
118+
119+
After:
120+
121+
```php
122+
$builder->add('length', 'number', array(
123+
'scale' => 3,
124+
));
125+
```
126+
109127
* The method `AbstractType::setDefaultOptions(OptionsResolverInterface $resolver)` and
110128
`AbstractTypeExtension::setDefaultOptions(OptionsResolverInterface $resolver)` have been
111129
renamed. You should use `AbstractType::configureOptions(OptionsResolver $resolver)` and

src/Symfony/Component/Form/CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CHANGELOG
44
2.7.0
55
-----
66

7+
* deprecated option "precision" in favor of "scale"
78
* deprecated the overwriting of AbstractType::setDefaultOptions() in favor of overwriting AbstractType::configureOptions().
89
* deprecated the overwriting of AbstractTypeExtension::setDefaultOptions() in favor of overwriting AbstractTypeExtension::configureOptions().
910

src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ class IntegerToLocalizedStringTransformer extends NumberToLocalizedStringTransfo
2222
/**
2323
* Constructs a transformer.
2424
*
25-
* @param int $precision Unused.
25+
* @param int $scale Unused.
2626
* @param bool $grouping Whether thousands should be grouped.
2727
* @param int $roundingMode One of the ROUND_ constants in this class.
2828
*/
29-
public function __construct($precision = 0, $grouping = false, $roundingMode = self::ROUND_DOWN)
29+
public function __construct($scale = 0, $grouping = false, $roundingMode = self::ROUND_DOWN)
3030
{
3131
if (null === $roundingMode) {
3232
$roundingMode = self::ROUND_DOWN;

src/Symfony/Component/Form/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformer.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,17 @@ class MoneyToLocalizedStringTransformer extends NumberToLocalizedStringTransform
2323
{
2424
private $divisor;
2525

26-
public function __construct($precision = 2, $grouping = true, $roundingMode = self::ROUND_HALF_UP, $divisor = 1)
26+
public function __construct($scale = 2, $grouping = true, $roundingMode = self::ROUND_HALF_UP, $divisor = 1)
2727
{
2828
if (null === $grouping) {
2929
$grouping = true;
3030
}
3131

32-
if (null === $precision) {
33-
$precision = 2;
32+
if (null === $scale) {
33+
$scale = 2;
3434
}
3535

36-
parent::__construct($precision, $grouping, $roundingMode);
36+
parent::__construct($scale, $grouping, $roundingMode);
3737

3838
if (null === $divisor) {
3939
$divisor = 1;

src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php

+7-4
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,16 @@ class NumberToLocalizedStringTransformer implements DataTransformerInterface
9393
*/
9494
const ROUND_HALFDOWN = \NumberFormatter::ROUND_HALFDOWN;
9595

96+
/**
97+
* @deprecated since version 2.7, will be replaced by a $scale private property in 3.0.
98+
*/
9699
protected $precision;
97100

98101
protected $grouping;
99102

100103
protected $roundingMode;
101104

102-
public function __construct($precision = null, $grouping = false, $roundingMode = self::ROUND_HALF_UP)
105+
public function __construct($scale = null, $grouping = false, $roundingMode = self::ROUND_HALF_UP)
103106
{
104107
if (null === $grouping) {
105108
$grouping = false;
@@ -109,7 +112,7 @@ public function __construct($precision = null, $grouping = false, $roundingMode
109112
$roundingMode = self::ROUND_HALF_UP;
110113
}
111114

112-
$this->precision = $precision;
115+
$this->precision = $scale;
113116
$this->grouping = $grouping;
114117
$this->roundingMode = $roundingMode;
115118
}
@@ -240,7 +243,7 @@ protected function getNumberFormatter()
240243
}
241244

242245
/**
243-
* Rounds a number according to the configured precision and rounding mode.
246+
* Rounds a number according to the configured scale and rounding mode.
244247
*
245248
* @param int|float $number A number.
246249
*
@@ -249,7 +252,7 @@ protected function getNumberFormatter()
249252
private function round($number)
250253
{
251254
if (null !== $this->precision && null !== $this->roundingMode) {
252-
// shift number to maintain the correct precision during rounding
255+
// shift number to maintain the correct scale during rounding
253256
$roundingCoef = pow(10, $this->precision);
254257
$number *= $roundingCoef;
255258

src/Symfony/Component/Form/Extension/Core/DataTransformer/PercentToLocalizedStringTransformer.php

+8-8
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,22 @@ class PercentToLocalizedStringTransformer implements DataTransformerInterface
3333

3434
private $type;
3535

36-
private $precision;
36+
private $scale;
3737

3838
/**
3939
* Constructor.
4040
*
4141
* @see self::$types for a list of supported types
4242
*
43-
* @param int $precision The precision
44-
* @param string $type One of the supported types
43+
* @param int $scale The scale
44+
* @param string $type One of the supported types
4545
*
4646
* @throws UnexpectedTypeException if the given value of type is unknown
4747
*/
48-
public function __construct($precision = null, $type = null)
48+
public function __construct($scale = null, $type = null)
4949
{
50-
if (null === $precision) {
51-
$precision = 0;
50+
if (null === $scale) {
51+
$scale = 0;
5252
}
5353

5454
if (null === $type) {
@@ -60,7 +60,7 @@ public function __construct($precision = null, $type = null)
6060
}
6161

6262
$this->type = $type;
63-
$this->precision = $precision;
63+
$this->scale = $scale;
6464
}
6565

6666
/**
@@ -142,7 +142,7 @@ protected function getNumberFormatter()
142142
{
143143
$formatter = new \NumberFormatter(\Locale::getDefault(), \NumberFormatter::DECIMAL);
144144

145-
$formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, $this->precision);
145+
$formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, $this->scale);
146146

147147
return $formatter;
148148
}

src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php

+15-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Symfony\Component\Form\AbstractType;
1515
use Symfony\Component\Form\FormBuilderInterface;
1616
use Symfony\Component\Form\Extension\Core\DataTransformer\IntegerToLocalizedStringTransformer;
17+
use Symfony\Component\OptionsResolver\Options;
1718
use Symfony\Component\OptionsResolver\OptionsResolver;
1819

1920
class IntegerType extends AbstractType
@@ -25,7 +26,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
2526
{
2627
$builder->addViewTransformer(
2728
new IntegerToLocalizedStringTransformer(
28-
$options['precision'],
29+
$options['scale'],
2930
$options['grouping'],
3031
$options['rounding_mode']
3132
));
@@ -36,9 +37,19 @@ public function buildForm(FormBuilderInterface $builder, array $options)
3637
*/
3738
public function configureOptions(OptionsResolver $resolver)
3839
{
40+
$scale = function (Options $options) {
41+
if (null !== $options['precision']) {
42+
trigger_error('The form option "precision" is deprecated since version 2.7 and will be removed in 3.0. Use "scale" instead.', E_USER_DEPRECATED);
43+
}
44+
45+
return $options['precision'];
46+
};
47+
3948
$resolver->setDefaults(array(
40-
// default precision is locale specific (usually around 3)
49+
// deprecated as of Symfony 2.7, to be removed in Symfony 3.0.
4150
'precision' => null,
51+
// default scale is locale specific (usually around 3)
52+
'scale' => $scale,
4253
'grouping' => false,
4354
// Integer cast rounds towards 0, so do the same when displaying fractions
4455
'rounding_mode' => IntegerToLocalizedStringTransformer::ROUND_DOWN,
@@ -56,6 +67,8 @@ public function configureOptions(OptionsResolver $resolver)
5667
IntegerToLocalizedStringTransformer::ROUND_CEILING,
5768
),
5869
));
70+
71+
$resolver->setAllowedTypes('scale', array('null', 'int'));
5972
}
6073

6174
/**

src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php

+17-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Symfony\Component\Form\FormBuilderInterface;
1717
use Symfony\Component\Form\Extension\Core\DataTransformer\MoneyToLocalizedStringTransformer;
1818
use Symfony\Component\Form\FormView;
19+
use Symfony\Component\OptionsResolver\Options;
1920
use Symfony\Component\OptionsResolver\OptionsResolver;
2021

2122
class MoneyType extends AbstractType
@@ -29,7 +30,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
2930
{
3031
$builder
3132
->addViewTransformer(new MoneyToLocalizedStringTransformer(
32-
$options['precision'],
33+
$options['scale'],
3334
$options['grouping'],
3435
null,
3536
$options['divisor']
@@ -50,13 +51,27 @@ public function buildView(FormView $view, FormInterface $form, array $options)
5051
*/
5152
public function configureOptions(OptionsResolver $resolver)
5253
{
54+
$scale = function (Options $options) {
55+
if (null !== $options['precision']) {
56+
trigger_error('The form option "precision" is deprecated since version 2.7 and will be removed in 3.0. Use "scale" instead.', E_USER_DEPRECATED);
57+
58+
return $options['precision'];
59+
}
60+
61+
return 2;
62+
};
63+
5364
$resolver->setDefaults(array(
54-
'precision' => 2,
65+
// deprecated as of Symfony 2.7, to be removed in Symfony 3.0
66+
'precision' => null,
67+
'scale' => $scale,
5568
'grouping' => false,
5669
'divisor' => 1,
5770
'currency' => 'EUR',
5871
'compound' => false,
5972
));
73+
74+
$resolver->setAllowedTypes('scale', 'int');
6075
}
6176

6277
/**

src/Symfony/Component/Form/Extension/Core/Type/NumberType.php

+15-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Symfony\Component\Form\AbstractType;
1515
use Symfony\Component\Form\FormBuilderInterface;
1616
use Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer;
17+
use Symfony\Component\OptionsResolver\Options;
1718
use Symfony\Component\OptionsResolver\OptionsResolver;
1819

1920
class NumberType extends AbstractType
@@ -24,7 +25,7 @@ class NumberType extends AbstractType
2425
public function buildForm(FormBuilderInterface $builder, array $options)
2526
{
2627
$builder->addViewTransformer(new NumberToLocalizedStringTransformer(
27-
$options['precision'],
28+
$options['scale'],
2829
$options['grouping'],
2930
$options['rounding_mode']
3031
));
@@ -35,9 +36,19 @@ public function buildForm(FormBuilderInterface $builder, array $options)
3536
*/
3637
public function configureOptions(OptionsResolver $resolver)
3738
{
39+
$scale = function (Options $options) {
40+
if (null !== $options['precision']) {
41+
trigger_error('The form option "precision" is deprecated since version 2.7 and will be removed in 3.0. Use "scale" instead.', E_USER_DEPRECATED);
42+
}
43+
44+
return $options['precision'];
45+
};
46+
3847
$resolver->setDefaults(array(
39-
// default precision is locale specific (usually around 3)
48+
// deprecated as of Symfony 2.7, to be removed in Symfony 3.0
4049
'precision' => null,
50+
// default scale is locale specific (usually around 3)
51+
'scale' => $scale,
4152
'grouping' => false,
4253
'rounding_mode' => NumberToLocalizedStringTransformer::ROUND_HALF_UP,
4354
'compound' => false,
@@ -54,6 +65,8 @@ public function configureOptions(OptionsResolver $resolver)
5465
NumberToLocalizedStringTransformer::ROUND_CEILING,
5566
),
5667
));
68+
69+
$resolver->setAllowedTypes('scale', array('null', 'int'));
5770
}
5871

5972
/**

src/Symfony/Component/Form/Extension/Core/Type/PercentType.php

+17-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Symfony\Component\Form\AbstractType;
1515
use Symfony\Component\Form\FormBuilderInterface;
1616
use Symfony\Component\Form\Extension\Core\DataTransformer\PercentToLocalizedStringTransformer;
17+
use Symfony\Component\OptionsResolver\Options;
1718
use Symfony\Component\OptionsResolver\OptionsResolver;
1819

1920
class PercentType extends AbstractType
@@ -23,16 +24,28 @@ class PercentType extends AbstractType
2324
*/
2425
public function buildForm(FormBuilderInterface $builder, array $options)
2526
{
26-
$builder->addViewTransformer(new PercentToLocalizedStringTransformer($options['precision'], $options['type']));
27+
$builder->addViewTransformer(new PercentToLocalizedStringTransformer($options['scale'], $options['type']));
2728
}
2829

2930
/**
3031
* {@inheritdoc}
3132
*/
3233
public function configureOptions(OptionsResolver $resolver)
3334
{
35+
$scale = function (Options $options) {
36+
if (null !== $options['precision']) {
37+
trigger_error('The form option "precision" is deprecated since version 2.7 and will be removed in 3.0. Use "scale" instead.', E_USER_DEPRECATED);
38+
39+
return $options['precision'];
40+
}
41+
42+
return 0;
43+
};
44+
3445
$resolver->setDefaults(array(
35-
'precision' => 0,
46+
// deprecated as of Symfony 2.7, to be removed in Symfony 3.0.
47+
'precision' => null,
48+
'scale' => $scale,
3649
'type' => 'fractional',
3750
'compound' => false,
3851
));
@@ -43,6 +56,8 @@ public function configureOptions(OptionsResolver $resolver)
4356
'integer',
4457
),
4558
));
59+
60+
$resolver->setAllowedTypes('scale', 'int');
4661
}
4762

4863
/**

src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php

+7-7
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public function testTransformWithGrouping($from, $to, $locale)
7474
$this->assertSame($to, $transformer->transform($from));
7575
}
7676

77-
public function testTransformWithPrecision()
77+
public function testTransformWithScale()
7878
{
7979
$transformer = new NumberToLocalizedStringTransformer(2);
8080

@@ -174,14 +174,14 @@ public function transformWithRoundingProvider()
174174
/**
175175
* @dataProvider transformWithRoundingProvider
176176
*/
177-
public function testTransformWithRounding($precision, $input, $output, $roundingMode)
177+
public function testTransformWithRounding($scale, $input, $output, $roundingMode)
178178
{
179-
$transformer = new NumberToLocalizedStringTransformer($precision, null, $roundingMode);
179+
$transformer = new NumberToLocalizedStringTransformer($scale, null, $roundingMode);
180180

181181
$this->assertEquals($output, $transformer->transform($input));
182182
}
183183

184-
public function testTransformDoesNotRoundIfNoPrecision()
184+
public function testTransformDoesNotRoundIfNoScale()
185185
{
186186
$transformer = new NumberToLocalizedStringTransformer(null, null, NumberToLocalizedStringTransformer::ROUND_DOWN);
187187

@@ -327,14 +327,14 @@ public function reverseTransformWithRoundingProvider()
327327
/**
328328
* @dataProvider reverseTransformWithRoundingProvider
329329
*/
330-
public function testReverseTransformWithRounding($precision, $input, $output, $roundingMode)
330+
public function testReverseTransformWithRounding($scale, $input, $output, $roundingMode)
331331
{
332-
$transformer = new NumberToLocalizedStringTransformer($precision, null, $roundingMode);
332+
$transformer = new NumberToLocalizedStringTransformer($scale, null, $roundingMode);
333333

334334
$this->assertEquals($output, $transformer->reverseTransform($input));
335335
}
336336

337-
public function testReverseTransformDoesNotRoundIfNoPrecision()
337+
public function testReverseTransformDoesNotRoundIfNoScale()
338338
{
339339
$transformer = new NumberToLocalizedStringTransformer(null, null, NumberToLocalizedStringTransformer::ROUND_DOWN);
340340

0 commit comments

Comments
 (0)