vendor/sonata-project/core-bundle/src/CoreBundle/SonataCoreBundle.php line 69

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of the Sonata Project package.
  5.  *
  6.  * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  7.  *
  8.  * For the full copyright and license information, please view the LICENSE
  9.  * file that was distributed with this source code.
  10.  */
  11. namespace Sonata\CoreBundle;
  12. use Nelmio\ApiDocBundle\Form\Extension\DescriptionFormTypeExtension;
  13. use Sonata\CoreBundle\DependencyInjection\Compiler\AdapterCompilerPass;
  14. use Sonata\CoreBundle\DependencyInjection\Compiler\FlashMessageCompilerPass;
  15. use Sonata\CoreBundle\DependencyInjection\Compiler\FormFactoryCompilerPass;
  16. use Sonata\CoreBundle\DependencyInjection\Compiler\StatusRendererCompilerPass;
  17. use Sonata\CoreBundle\Form\FormHelper;
  18. use Sonata\CoreBundle\Form\Type\ColorSelectorType;
  19. use Sonata\CoreBundle\Form\Type\ColorType;
  20. use Sonata\CoreBundle\Form\Type\TranslatableChoiceType;
  21. use Sonata\Form\Type\BooleanType;
  22. use Sonata\Form\Type\CollectionType;
  23. use Sonata\Form\Type\DatePickerType;
  24. use Sonata\Form\Type\DateRangePickerType;
  25. use Sonata\Form\Type\DateRangeType;
  26. use Sonata\Form\Type\DateTimePickerType;
  27. use Sonata\Form\Type\DateTimeRangePickerType;
  28. use Sonata\Form\Type\DateTimeRangeType;
  29. use Sonata\Form\Type\EqualType;
  30. use Sonata\Form\Type\ImmutableArrayType;
  31. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  32. use Symfony\Component\DependencyInjection\ContainerBuilder;
  33. use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
  34. use Symfony\Component\Form\Extension\Core\Type\ButtonType;
  35. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  36. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  37. use Symfony\Component\Form\Extension\Core\Type\CollectionType as SymfonyCollectionType;
  38. use Symfony\Component\Form\Extension\Core\Type\CountryType;
  39. use Symfony\Component\Form\Extension\Core\Type\CurrencyType;
  40. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  41. use Symfony\Component\Form\Extension\Core\Type\DateType;
  42. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  43. use Symfony\Component\Form\Extension\Core\Type\FileType;
  44. use Symfony\Component\Form\Extension\Core\Type\FormType;
  45. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  46. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  47. use Symfony\Component\Form\Extension\Core\Type\LanguageType;
  48. use Symfony\Component\Form\Extension\Core\Type\LocaleType;
  49. use Symfony\Component\Form\Extension\Core\Type\MoneyType;
  50. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  51. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  52. use Symfony\Component\Form\Extension\Core\Type\PercentType;
  53. use Symfony\Component\Form\Extension\Core\Type\RadioType;
  54. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  55. use Symfony\Component\Form\Extension\Core\Type\ResetType;
  56. use Symfony\Component\Form\Extension\Core\Type\SearchType;
  57. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  58. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  59. use Symfony\Component\Form\Extension\Core\Type\TextType;
  60. use Symfony\Component\Form\Extension\Core\Type\TimeType;
  61. use Symfony\Component\Form\Extension\Core\Type\TimezoneType;
  62. use Symfony\Component\Form\Extension\Core\Type\UrlType;
  63. use Symfony\Component\HttpKernel\Bundle\Bundle;
  64. class SonataCoreBundle extends Bundle
  65. {
  66.     public function build(ContainerBuilder $container)
  67.     {
  68.         $container->addCompilerPass(new StatusRendererCompilerPass());
  69.         $container->addCompilerPass(new FlashMessageCompilerPass());
  70.         $container->addCompilerPass(new AdapterCompilerPass());
  71.         $container->addCompilerPass(new FormFactoryCompilerPass());
  72.         $this->registerFormMapping();
  73.     }
  74.     public function boot()
  75.     {
  76.         // not sur we need this at Runtime ...
  77.         $this->registerFormMapping();
  78.     }
  79.     /**
  80.      * Register form mapping information.
  81.      */
  82.     public function registerFormMapping()
  83.     {
  84.         // symfony
  85.         FormHelper::registerFormTypeMapping([
  86.             'form' => FormType::class,
  87.             'birthday' => BirthdayType::class,
  88.             'checkbox' => CheckboxType::class,
  89.             'choice' => ChoiceType::class,
  90.             'collection' => SymfonyCollectionType::class,
  91.             'country' => CountryType::class,
  92.             'date' => DateType::class,
  93.             'datetime' => DateTimeType::class,
  94.             'email' => EmailType::class,
  95.             'file' => FileType::class,
  96.             'hidden' => HiddenType::class,
  97.             'integer' => IntegerType::class,
  98.             'language' => LanguageType::class,
  99.             'locale' => LocaleType::class,
  100.             'money' => MoneyType::class,
  101.             'number' => NumberType::class,
  102.             'password' => PasswordType::class,
  103.             'percent' => PercentType::class,
  104.             'radio' => RadioType::class,
  105.             'repeated' => RepeatedType::class,
  106.             'search' => SearchType::class,
  107.             'textarea' => TextareaType::class,
  108.             'text' => TextType::class,
  109.             'time' => TimeType::class,
  110.             'timezone' => TimezoneType::class,
  111.             'url' => UrlType::class,
  112.             'button' => ButtonType::class,
  113.             'submit' => SubmitType::class,
  114.             'reset' => ResetType::class,
  115.             'currency' => CurrencyType::class,
  116.             'entity' => EntityType::class,
  117.         ]);
  118.         // core bundle
  119.         FormHelper::registerFormTypeMapping([
  120.             'sonata_type_immutable_array' => ImmutableArrayType::class,
  121.             'sonata_type_boolean' => BooleanType::class,
  122.             'sonata_type_collection' => CollectionType::class,
  123.             'sonata_type_translatable_choice' => TranslatableChoiceType::class,
  124.             'sonata_type_date_range' => DateRangeType::class,
  125.             'sonata_type_datetime_range' => DateTimeRangeType::class,
  126.             'sonata_type_date_picker' => DatePickerType::class,
  127.             'sonata_type_datetime_picker' => DateTimePickerType::class,
  128.             'sonata_type_date_range_picker' => DateRangePickerType::class,
  129.             'sonata_type_datetime_range_picker' => DateTimeRangePickerType::class,
  130.             'sonata_type_equal' => EqualType::class,
  131.             'sonata_type_color' => ColorType::class,
  132.             'sonata_type_color_selector' => ColorSelectorType::class,
  133.         ]);
  134.         $formTypes = [
  135.             'form.type_extension.form.http_foundation',
  136.             'form.type_extension.form.validator',
  137.             'form.type_extension.csrf',
  138.             'form.type_extension.form.data_collector',
  139.         ];
  140.         if (class_exists(DescriptionFormTypeExtension::class)) {
  141.             $formTypes[] = 'nelmio_api_doc.form.extension.description_form_type_extension';
  142.         }
  143.         FormHelper::registerFormExtensionMapping('form'$formTypes);
  144.         FormHelper::registerFormExtensionMapping('repeated', [
  145.             'form.type_extension.repeated.validator',
  146.         ]);
  147.         FormHelper::registerFormExtensionMapping('submit', [
  148.             'form.type_extension.submit.validator',
  149.         ]);
  150.         if ($this->container && $this->container->hasParameter('sonata.core.form.mapping.type')) {
  151.             // from configuration file
  152.             FormHelper::registerFormTypeMapping($this->container->getParameter('sonata.core.form.mapping.type'));
  153.             foreach ($this->container->getParameter('sonata.core.form.mapping.extension') as $ext => $types) {
  154.                 FormHelper::registerFormExtensionMapping($ext$types);
  155.             }
  156.         }
  157.     }
  158. }