From b6a105c952b827dcac587a23486f3e57887ff62a Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 10 Jul 2025 11:59:09 +0200 Subject: [PATCH] Fix compatibility with Symfony 8 --- .../MissingExtensionSuggestorPass.php | 29 +++++++++++++++---- .../TwigExtraExtension.php | 27 +++++++++++++++-- extra/twig-extra-bundle/TwigExtraBundle.php | 24 +++++++++++---- 3 files changed, 67 insertions(+), 13 deletions(-) diff --git a/extra/twig-extra-bundle/DependencyInjection/Compiler/MissingExtensionSuggestorPass.php b/extra/twig-extra-bundle/DependencyInjection/Compiler/MissingExtensionSuggestorPass.php index 83c6643f09d..79d7baa44d6 100644 --- a/extra/twig-extra-bundle/DependencyInjection/Compiler/MissingExtensionSuggestorPass.php +++ b/extra/twig-extra-bundle/DependencyInjection/Compiler/MissingExtensionSuggestorPass.php @@ -15,12 +15,31 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Reference; -class MissingExtensionSuggestorPass implements CompilerPassInterface -{ - /** @return void */ - public function process(ContainerBuilder $container) +if (!method_exists(ContainerBuilder::class, 'getAutoconfiguredAttributes')) { + class MissingExtensionSuggestorPass implements CompilerPassInterface { - if ($container->getParameter('kernel.debug')) { + public function process(ContainerBuilder $container): void + { + if (!$container->getParameter('kernel.debug')) { + return; + } + $twigDefinition = $container->getDefinition('twig'); + $twigDefinition + ->addMethodCall('registerUndefinedFilterCallback', [[new Reference('twig.missing_extension_suggestor'), 'suggestFilter']]) + ->addMethodCall('registerUndefinedFunctionCallback', [[new Reference('twig.missing_extension_suggestor'), 'suggestFunction']]) + ->addMethodCall('registerUndefinedTokenParserCallback', [[new Reference('twig.missing_extension_suggestor'), 'suggestTag']]) + ; + } + } +} else { + class MissingExtensionSuggestorPass implements CompilerPassInterface + { + /** @return void */ + public function process(ContainerBuilder $container) + { + if (!$container->getParameter('kernel.debug')) { + return; + } $twigDefinition = $container->getDefinition('twig'); $twigDefinition ->addMethodCall('registerUndefinedFilterCallback', [[new Reference('twig.missing_extension_suggestor'), 'suggestFilter']]) diff --git a/extra/twig-extra-bundle/DependencyInjection/TwigExtraExtension.php b/extra/twig-extra-bundle/DependencyInjection/TwigExtraExtension.php index 8c399b891ce..7c5a7c7db16 100644 --- a/extra/twig-extra-bundle/DependencyInjection/TwigExtraExtension.php +++ b/extra/twig-extra-bundle/DependencyInjection/TwigExtraExtension.php @@ -18,13 +18,36 @@ use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; use Twig\Extra\TwigExtraBundle\Extensions; +if (!method_exists(ContainerBuilder::class, 'getAutoconfiguredAttributes')) { + /** @internal */ + trait TwigExtraExtensionTrait + { + public function load(array $configs, ContainerBuilder $container): void + { + $this->doLoad($configs, $container); + } + } +} else { + /** @internal */ + trait TwigExtraExtensionTrait + { + /** @return void */ + public function load(array $configs, ContainerBuilder $container) + { + $this->doLoad($configs, $container); + } + } + +} + /** * @author Fabien Potencier */ class TwigExtraExtension extends Extension { - /** @return void */ - public function load(array $configs, ContainerBuilder $container) + use TwigExtraExtensionTrait; + + private function doLoad(array $configs, ContainerBuilder $container): void { $loader = new PhpFileLoader($container, new FileLocator(\dirname(__DIR__).'/Resources/config')); $configuration = $this->getConfiguration($configs, $container); diff --git a/extra/twig-extra-bundle/TwigExtraBundle.php b/extra/twig-extra-bundle/TwigExtraBundle.php index a9c8f734bf8..e2d181145f6 100644 --- a/extra/twig-extra-bundle/TwigExtraBundle.php +++ b/extra/twig-extra-bundle/TwigExtraBundle.php @@ -15,13 +15,25 @@ use Symfony\Component\HttpKernel\Bundle\Bundle; use Twig\Extra\TwigExtraBundle\DependencyInjection\Compiler\MissingExtensionSuggestorPass; -class TwigExtraBundle extends Bundle -{ - /** @return void */ - public function build(ContainerBuilder $container) +if (!method_exists(ContainerBuilder::class, 'getAutoconfiguredAttributes')) { + class TwigExtraBundle extends Bundle { - parent::build($container); + public function build(ContainerBuilder $container): void + { + parent::build($container); - $container->addCompilerPass(new MissingExtensionSuggestorPass()); + $container->addCompilerPass(new MissingExtensionSuggestorPass()); + } + } +} else { + class TwigExtraBundle extends Bundle + { + /** @return void */ + public function build(ContainerBuilder $container) + { + parent::build($container); + + $container->addCompilerPass(new MissingExtensionSuggestorPass()); + } } }