Skip to content

Commit 22efe7b

Browse files
committed
Add compatibility with Twig 3 and BC layer for Twig 1 and 2
1 parent ac277ac commit 22efe7b

File tree

4 files changed

+62
-11
lines changed

4 files changed

+62
-11
lines changed

DependencyInjection/AdmingeneratorFormExtensionsExtension.php

+14-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
use Admingenerator\FormExtensionsBundle\Form\Extension\NoValidateExtension;
99
use Admingenerator\FormExtensionsBundle\Form\Extension\SingleUploadExtension;
1010
use Admingenerator\FormExtensionsBundle\Twig\Extension\ImageAssetsExtension;
11+
use Admingenerator\FormExtensionsBundle\Twig\Extension\IncludeGlobalsExtension;
12+
use Admingenerator\FormExtensionsBundle\Twig\Extension\LegacyIncludeGlobalsExtension;
1113
use Symfony\Component\Config\FileLocator;
1214
use Symfony\Component\DependencyInjection\ContainerBuilder;
1315
use Symfony\Component\DependencyInjection\Loader;
@@ -16,6 +18,7 @@
1618
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
1719
use Symfony\Component\DependencyInjection\Definition;
1820
use Symfony\Component\DependencyInjection\Reference;
21+
use Twig\Environment;
1922

2023
/**
2124
* Loads FormExtensions configuration
@@ -46,9 +49,11 @@ public function load(array $configs, ContainerBuilder $container)
4649

4750
$this->configureAssetsExtension($container, $config['upload_manager'], $config['image_manipulator']);
4851

49-
$this->configureExtensions($config['extensions'], $container);
52+
$this->configureFormExtensions($config['extensions'], $container);
5053

5154
$this->loadUploadCollectionListener($config['upload_collection'], $container);
55+
56+
$this->loadGlobalsExtension($container);
5257
}
5358

5459
/**
@@ -57,7 +62,7 @@ public function load(array $configs, ContainerBuilder $container)
5762
* @param array $config
5863
* @param ContainerBuilder $container
5964
*/
60-
private function configureExtensions(array $config, ContainerBuilder $container) {
65+
private function configureFormExtensions(array $config, ContainerBuilder $container) {
6166
if ($config['autocomplete']) {
6267
$this->registerExtension($container, 'form.type_extension.autocomplete', AutocompleteExtension::class);
6368
}
@@ -143,4 +148,11 @@ private function configureAssetsExtension(ContainerBuilder $container, string $u
143148
$assetsExtensionDefinition->addTag('twig.extension');
144149
$container->setDefinition('admingenerator.twig.extension.image_assets', $assetsExtensionDefinition);
145150
}
151+
152+
private function loadGlobalsExtension(ContainerBuilder $container) {
153+
$globalsExtensionDefinition = Environment::MAJOR_VERSION > 2 ? new Definition(IncludeGlobalsExtension::class) : new Definition(LegacyIncludeGlobalsExtension::class);
154+
$globalsExtensionDefinition->setArgument('$container', new Reference('service_container'));
155+
$globalsExtensionDefinition->addTag('twig.extension');
156+
$container->setDefinition('admingenerator.twig.extension.include_globals', $globalsExtensionDefinition);
157+
}
146158
}

Resources/config/services.xml

-7
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,6 @@
113113
<tag name="form.type" />
114114
</service>
115115

116-
<!-- Twig extensions -->
117-
118-
<service id="admingenerator.twig.extension.include_globals" class="Admingenerator\FormExtensionsBundle\Twig\Extension\IncludeGlobalsExtension">
119-
<tag name="twig.extension" />
120-
<argument type="service" id="service_container" />
121-
</service>
122-
123116
<!-- Custom services -->
124117
<service id="admingenerator.form.file_storage.local" class="Admingenerator\FormExtensionsBundle\Storage\LocalFileStorage">
125118
<argument type="service" id="session" />

Twig/Extension/IncludeGlobalsExtension.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use Twig\Extension\GlobalsInterface;
88

99
/**
10-
* This extension adds global variables based on bundles configuration.
10+
* This extension adds global variables based on bundles configuration. For Twig 3 and higher.
1111
*
1212
* @author Piotr Gołębiewski <[email protected]>
1313
*/
@@ -23,7 +23,7 @@ public function __construct(ContainerInterface $container)
2323
/**
2424
* {@inheritdoc}
2525
*/
26-
public function getGlobals()
26+
public function getGlobals(): array
2727
{
2828
return array(
2929
's2a_formextensions_include_jquery' => $this->container->getParameter('admingenerator.form.include_jquery'),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
namespace Admingenerator\FormExtensionsBundle\Twig\Extension;
4+
5+
use Symfony\Component\DependencyInjection\ContainerInterface;
6+
use Twig\Extension\AbstractExtension;
7+
use Twig\Extension\GlobalsInterface;
8+
9+
/**
10+
* This extension adds global variables based on bundles configuration. Only for Twig 1 and 2.
11+
*
12+
* @author Piotr Gołębiewski <[email protected]>
13+
*/
14+
class LegacyIncludeGlobalsExtension extends AbstractExtension implements GlobalsInterface
15+
{
16+
protected $container;
17+
18+
public function __construct(ContainerInterface $container)
19+
{
20+
$this->container = $container;
21+
}
22+
23+
/**
24+
* {@inheritdoc}
25+
*/
26+
public function getGlobals()
27+
{
28+
return array(
29+
's2a_formextensions_include_jquery' => $this->container->getParameter('admingenerator.form.include_jquery'),
30+
's2a_formextensions_include_jqueryui' => $this->container->getParameter('admingenerator.form.include_jqueryui'),
31+
's2a_formextensions_include_momentjs' => $this->container->getParameter('admingenerator.form.include_momentjs'),
32+
's2a_formextensions_include_blueimp' => $this->container->getParameter('admingenerator.form.include_blueimp'),
33+
's2a_formextensions_include_gmaps' => $this->container->getParameter('admingenerator.form.include_gmaps'),
34+
);
35+
}
36+
37+
/**
38+
* Returns the name of the extension.
39+
*
40+
* @return string The extension name
41+
*/
42+
public function getName()
43+
{
44+
return 'admingenerator.twig.extension.include_globals';
45+
}
46+
}

0 commit comments

Comments
 (0)