]>
Commit | Line | Data |
---|---|---|
4f5b44bd NL |
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\Extension\Core\DataTransformer; | |
13 | ||
14 | use Symfony\Component\Form\Exception\TransformationFailedException; | |
15 | ||
16 | /** | |
17 | * Transforms between a normalized format and a localized money string. | |
18 | * | |
19 | * @author Bernhard Schussek <bschussek@gmail.com> | |
20 | * @author Florian Eckerstorfer <florian@eckerstorfer.org> | |
21 | */ | |
22 | class MoneyToLocalizedStringTransformer extends NumberToLocalizedStringTransformer | |
23 | { | |
24 | ||
25 | private $divisor; | |
26 | ||
27 | public function __construct($precision = null, $grouping = null, $roundingMode = null, $divisor = null) | |
28 | { | |
29 | if (null === $grouping) { | |
30 | $grouping = true; | |
31 | } | |
32 | ||
33 | if (null === $precision) { | |
34 | $precision = 2; | |
35 | } | |
36 | ||
37 | parent::__construct($precision, $grouping, $roundingMode); | |
38 | ||
39 | if (null === $divisor) { | |
40 | $divisor = 1; | |
41 | } | |
42 | ||
43 | $this->divisor = $divisor; | |
44 | } | |
45 | ||
46 | /** | |
47 | * Transforms a normalized format into a localized money string. | |
48 | * | |
49 | * @param number $value Normalized number | |
50 | * | |
51 | * @return string Localized money string. | |
52 | * | |
53 | * @throws TransformationFailedException If the given value is not numeric or | |
54 | * if the value can not be transformed. | |
55 | */ | |
56 | public function transform($value) | |
57 | { | |
58 | if (null !== $value) { | |
59 | if (!is_numeric($value)) { | |
60 | throw new TransformationFailedException('Expected a numeric.'); | |
61 | } | |
62 | ||
63 | $value /= $this->divisor; | |
64 | } | |
65 | ||
66 | return parent::transform($value); | |
67 | } | |
68 | ||
69 | /** | |
70 | * Transforms a localized money string into a normalized format. | |
71 | * | |
72 | * @param string $value Localized money string | |
73 | * | |
74 | * @return number Normalized number | |
75 | * | |
76 | * @throws TransformationFailedException If the given value is not a string | |
77 | * or if the value can not be transformed. | |
78 | */ | |
79 | public function reverseTransform($value) | |
80 | { | |
81 | $value = parent::reverseTransform($value); | |
82 | ||
83 | if (null !== $value) { | |
84 | $value *= $this->divisor; | |
85 | } | |
86 | ||
87 | return $value; | |
88 | } | |
89 | ||
90 | } |