22
33namespace Admingenerator \FormExtensionsBundle \DependencyInjection ;
44
5+ use Admingenerator \FormExtensionsBundle \Form \Extension \AutocompleteExtension ;
6+ use Admingenerator \FormExtensionsBundle \Form \Extension \BootstrapSelectExtension ;
7+ use Admingenerator \FormExtensionsBundle \Form \Extension \HelpMessageExtension ;
8+ use Admingenerator \FormExtensionsBundle \Form \Extension \NoValidateExtension ;
9+ use Admingenerator \FormExtensionsBundle \Form \Extension \SingleUploadExtension ;
510use Symfony \Component \Config \FileLocator ;
611use Symfony \Component \DependencyInjection \ContainerBuilder ;
712use Symfony \Component \DependencyInjection \Loader ;
13+ use Symfony \Component \Form \Extension \Core \Type \ChoiceType ;
14+ use Symfony \Component \Form \Extension \Core \Type \FormType ;
815use Symfony \Component \HttpKernel \DependencyInjection \Extension ;
916use Symfony \Component \DependencyInjection \Definition ;
1017use Symfony \Component \DependencyInjection \Reference ;
@@ -36,9 +43,35 @@ public function load(array $configs, ContainerBuilder $container)
3643 $ container ->setParameter ('admingenerator.form.include_blueimp ' , $ config ['include_blueimp ' ]);
3744 $ container ->setParameter ('admingenerator.form.include_gmaps ' , $ config ['include_gmaps ' ]);
3845
46+ $ this ->configureExtensions ($ config ['extensions ' ], $ container );
47+
3948 $ this ->loadUploadCollectionListener ($ config ['upload_collection ' ], $ container );
4049 }
4150
51+ /**
52+ * Register the form extensions if required
53+ *
54+ * @param array $config
55+ * @param ContainerBuilder $container
56+ */
57+ private function configureExtensions (array $ config , ContainerBuilder $ container ) {
58+ if ($ config ['autocomplete ' ]) {
59+ $ this ->registerExtension ($ container , 'form.type_extension.autocomplete ' , AutocompleteExtension::class);
60+ }
61+ if ($ config ['bootstrap_select ' ]) {
62+ $ this ->registerExtension ($ container , 'form.type_extension.bootstrap_select ' , BootstrapSelectExtension::class, ChoiceType::class);
63+ }
64+ if ($ config ['help_message ' ]) {
65+ $ this ->registerExtension ($ container , 'form.type_extension.help_message ' , HelpMessageExtension::class);
66+ }
67+ if ($ config ['no_validate ' ]) {
68+ $ this ->registerExtension ($ container , 'form.type_extension.novalidate ' , NoValidateExtension::class);
69+ }
70+ if ($ config ['single_upload ' ]) {
71+ $ this ->registerExtension ($ container , 'form.type_extension.single_upload ' , SingleUploadExtension::class);
72+ }
73+ }
74+
4275 /**
4376 * Add the collection upload listener if required
4477 *
@@ -65,4 +98,19 @@ private function loadUploadCollectionListener(array $config, ContainerBuilder $c
6598 $ container ->getDefinition ('admingenerator.form.extensions.type.upload_collection ' )->addMethodCall ('setFileStorage ' , array (new Reference ($ config ['file_storage ' ])));
6699 }
67100 }
101+
102+ /**
103+ * @param ContainerBuilder $container
104+ * @param string $serviceId
105+ * @param string $extensionClass
106+ * @param string $extendedTypeClass
107+ */
108+ private function registerExtension (ContainerBuilder $ container , string $ serviceId , string $ extensionClass , string $ extendedTypeClass = FormType::class): void
109+ {
110+ $ extensionDefinition = new Definition ($ extensionClass );
111+ $ extensionDefinition ->addTag ('form.type_extension ' , [
112+ 'extended-type ' => $ extendedTypeClass ,
113+ ]);
114+ $ container ->setDefinition ($ serviceId , $ extensionDefinition );
115+ }
68116}
0 commit comments