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
12namespace Symfony\Component\Form\Extension\Core\Type;
13
14use Symfony\Component\Form\AbstractType;
15use Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer;
16use Symfony\Component\Form\FormBuilderInterface;
17use Symfony\Component\OptionsResolver\OptionsResolver;
18
19class NumberType extends AbstractType
20{
21    /**
22     * {@inheritdoc}
23     */
24    public function buildForm(FormBuilderInterface $builder, array $options)
25    {
26        $builder->addViewTransformer(new NumberToLocalizedStringTransformer(
27            $options['scale'],
28            $options['grouping'],
29            $options['rounding_mode']
30        ));
31    }
32
33    /**
34     * {@inheritdoc}
35     */
36    public function configureOptions(OptionsResolver $resolver)
37    {
38        $resolver->setDefaults([
39            // default scale is locale specific (usually around 3)
40            'scale' => null,
41            'grouping' => false,
42            'rounding_mode' => NumberToLocalizedStringTransformer::ROUND_HALF_UP,
43            'compound' => false,
44        ]);
45
46        $resolver->setAllowedValues('rounding_mode', [
47            NumberToLocalizedStringTransformer::ROUND_FLOOR,
48            NumberToLocalizedStringTransformer::ROUND_DOWN,
49            NumberToLocalizedStringTransformer::ROUND_HALF_DOWN,
50            NumberToLocalizedStringTransformer::ROUND_HALF_EVEN,
51            NumberToLocalizedStringTransformer::ROUND_HALF_UP,
52            NumberToLocalizedStringTransformer::ROUND_UP,
53            NumberToLocalizedStringTransformer::ROUND_CEILING,
54        ]);
55
56        $resolver->setAllowedTypes('scale', ['null', 'int']);
57    }
58
59    /**
60     * {@inheritdoc}
61     */
62    public function getBlockPrefix()
63    {
64        return 'number';
65    }
66}
67