Skip to content

Commit b36547e

Browse files
committed
Make Extensions configurable, to granularly use or disable Extension classes. No BC break due to default enable
1 parent e57b48a commit b36547e

9 files changed

+95
-26
lines changed

DependencyInjection/AdmingeneratorFormExtensionsExtension.php

+48
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,16 @@
22

33
namespace 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;
510
use Symfony\Component\Config\FileLocator;
611
use Symfony\Component\DependencyInjection\ContainerBuilder;
712
use Symfony\Component\DependencyInjection\Loader;
13+
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
14+
use Symfony\Component\Form\Extension\Core\Type\FormType;
815
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
916
use Symfony\Component\DependencyInjection\Definition;
1017
use 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
}

DependencyInjection/Configuration.php

+10
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,16 @@ public function getConfigTreeBuilder()
4343
->booleanNode('include_momentjs')->defaultFalse()->end()
4444
->booleanNode('include_blueimp')->defaultFalse()->end()
4545
->booleanNode('include_gmaps')->defaultFalse()->end()
46+
->arrayNode('extensions')
47+
->addDefaultsIfNotSet()
48+
->children()
49+
->booleanNode('autocomplete')->defaultTrue()->end()
50+
->booleanNode('bootstrap_select')->defaultTrue()->end()
51+
->booleanNode('help_message')->defaultTrue()->end()
52+
->booleanNode('no_validate')->defaultTrue()->end()
53+
->booleanNode('single_upload')->defaultTrue()->end()
54+
->end()
55+
->end()
4656
->end()
4757
;
4858

Form/Extension/AutocompleteExtension.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ public function configureOptions(OptionsResolver $resolver)
4141

4242
public function getExtendedType()
4343
{
44-
return 'Symfony\Component\Form\Extension\Core\Type\FormType';
44+
return self::getExtendedTypes()[0];
45+
}
46+
47+
public static function getExtendedTypes()
48+
{
49+
return ['Symfony\Component\Form\Extension\Core\Type\FormType'];
4550
}
4651
}

Form/Extension/BootstrapSelectExtension.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ public function buildView(FormView $view, FormInterface $form, array $options)
2222

2323
public function getExtendedType()
2424
{
25-
return 'Symfony\Component\Form\Extension\Core\Type\ChoiceType';
25+
return self::getExtendedTypes()[0];
26+
}
27+
28+
public static function getExtendedTypes()
29+
{
30+
return ['Symfony\Component\Form\Extension\Core\Type\ChoiceType'];
2631
}
2732
}

Form/Extension/HelpMessageExtension.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ public function configureOptions(OptionsResolver $resolver)
3737

3838
public function getExtendedType()
3939
{
40-
return 'Symfony\Component\Form\Extension\Core\Type\FormType';
40+
return self::getExtendedTypes()[0];
41+
}
42+
43+
public static function getExtendedTypes()
44+
{
45+
return ['Symfony\Component\Form\Extension\Core\Type\FormType'];
4146
}
4247
}

Form/Extension/NoValidateExtension.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ public function configureOptions(OptionsResolver $resolver)
3838

3939
public function getExtendedType()
4040
{
41-
return 'Symfony\Component\Form\Extension\Core\Type\FormType';
41+
return self::getExtendedTypes()[0];
42+
}
43+
44+
public static function getExtendedTypes()
45+
{
46+
return ['Symfony\Component\Form\Extension\Core\Type\FormType'];
4247
}
4348
}

Form/Extension/SingleUploadExtension.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,12 @@ public function buildForm(FormBuilderInterface $builder, array $options)
2929
*/
3030
public function getExtendedType()
3131
{
32-
return 'Symfony\Component\Form\Extension\Core\Type\FormType';
32+
return self::getExtendedTypes()[0];
33+
}
34+
35+
public static function getExtendedTypes()
36+
{
37+
return ['Symfony\Component\Form\Extension\Core\Type\FormType'];
3338
}
3439
}
3540

Resources/config/services.xml

-21
Original file line numberDiff line numberDiff line change
@@ -112,27 +112,6 @@
112112
<service id="admingenerator.form.extensions.type.hidden" class="Admingenerator\FormExtensionsBundle\Form\Type\HiddenType">
113113
<tag name="form.type" />
114114
</service>
115-
116-
<!-- Form extensions -->
117-
<service id="form.type_extension.autocomplete" class="Admingenerator\FormExtensionsBundle\Form\Extension\AutocompleteExtension">
118-
<tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\FormType" />
119-
</service>
120-
121-
<service id="form.type_extension.bootstrap_select" class="Admingenerator\FormExtensionsBundle\Form\Extension\BootstrapSelectExtension">
122-
<tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\ChoiceType" />
123-
</service>
124-
125-
<service id="form.type_extension.help_message" class="Admingenerator\FormExtensionsBundle\Form\Extension\HelpMessageExtension">
126-
<tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\FormType" />
127-
</service>
128-
129-
<service id="form.type_extension.novalidate" class="Admingenerator\FormExtensionsBundle\Form\Extension\NoValidateExtension">
130-
<tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\FormType" />
131-
</service>
132-
133-
<service id="form.type_extension.single_upload" class="Admingenerator\FormExtensionsBundle\Form\Extension\SingleUploadExtension">
134-
<tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\FormType" />
135-
</service>
136115

137116
<!-- Twig extensions -->
138117
<service id="admingenerator.twig.extension.image_assets" class="Admingenerator\FormExtensionsBundle\Twig\Extension\ImageAssetsExtension">

Resources/doc/documentation.md

+7
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ admingenerator_form_extensions:
2121
include_momentjs: false
2222
include_blueimp: false
2323
include_gmaps: false
24+
# you can disable the form extensions if you don't want or need them
25+
extensions:
26+
autocomplete: true
27+
bootstrap_select: true
28+
help_message: true
29+
no_validate: true
30+
single_upload: true
2431
```
2532
2633
##### Bootstrap Collection family:

0 commit comments

Comments
 (0)