From 0d537c4e4d3da375f67b601f0ecc9f93c9ab4388 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sat, 10 Jan 2015 11:34:10 +0100 Subject: [PATCH] decoupled Twig from the Templating system --- .../FrameworkExtension.php | 64 +++++++++++-------- .../Resources/config/old_assets.xml | 37 +++++++++++ .../Resources/config/templating.xml | 11 ++++ .../Resources/config/templating_php.xml | 33 ---------- .../Compiler/ExtensionPass.php | 19 ++++++ .../DependencyInjection/TwigExtension.php | 3 - .../TwigBundle/Resources/config/twig.xml | 7 +- 7 files changed, 108 insertions(+), 66 deletions(-) create mode 100644 src/Symfony/Bundle/FrameworkBundle/Resources/config/old_assets.xml diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index fdcd1be7fe16..0adf3cb6f815 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -458,7 +458,6 @@ private function registerRequestConfiguration(array $config, ContainerBuilder $c private function registerTemplatingConfiguration(array $config, $ide, ContainerBuilder $container, XmlFileLoader $loader) { $loader->load('templating.xml'); - $loader->load('templating_php.xml'); $links = array( 'textmate' => 'txmt://open?url=file://%%f&line=%%l', @@ -468,39 +467,36 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB ); $container->setParameter('templating.helper.code.file_link_format', isset($links[$ide]) ? $links[$ide] : $ide); - $container->setParameter('templating.helper.form.resources', $config['form']['resources']); $container->setParameter('fragment.renderer.hinclude.global_template', $config['hinclude_default_template']); - if ($container->getParameter('kernel.debug')) { - $loader->load('templating_debug.xml'); - - $logger = new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE); - - $container->getDefinition('templating.loader.cache') - ->addTag('monolog.logger', array('channel' => 'templating')) - ->addMethodCall('setLogger', array($logger)); - $container->getDefinition('templating.loader.chain') - ->addTag('monolog.logger', array('channel' => 'templating')) - ->addMethodCall('setLogger', array($logger)); - - $container->setDefinition('templating.engine.php', $container->findDefinition('debug.templating.engine.php')); - $container->setAlias('debug.templating.engine.php', 'templating.engine.php'); - } + $loader->load('old_assets.xml'); // create package definitions and add them to the assets helper - $defaultPackage = $this->createPackageDefinition($container, $config['assets_base_urls']['http'], $config['assets_base_urls']['ssl'], $config['assets_version'], $config['assets_version_format']); + $defaultPackage = $this->createTemplatingPackageDefinition($container, $config['assets_base_urls']['http'], $config['assets_base_urls']['ssl'], $config['assets_version'], $config['assets_version_format']); $container->setDefinition('templating.asset.default_package', $defaultPackage); $namedPackages = array(); foreach ($config['packages'] as $name => $package) { - $namedPackage = $this->createPackageDefinition($container, $package['base_urls']['http'], $package['base_urls']['ssl'], $package['version'], $package['version_format'], $name); + $namedPackage = $this->createTemplatingPackageDefinition($container, $package['base_urls']['http'], $package['base_urls']['ssl'], $package['version'], $package['version_format'], $name); $container->setDefinition('templating.asset.package.'.$name, $namedPackage); $namedPackages[$name] = new Reference('templating.asset.package.'.$name); } + $container->getDefinition('templating.helper.assets')->setArguments(array( new Reference('templating.asset.default_package'), $namedPackages, )); + if ($container->getParameter('kernel.debug')) { + $logger = new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE); + + $container->getDefinition('templating.loader.cache') + ->addTag('monolog.logger', array('channel' => 'templating')) + ->addMethodCall('setLogger', array($logger)); + $container->getDefinition('templating.loader.chain') + ->addTag('monolog.logger', array('channel' => 'templating')) + ->addMethodCall('setLogger', array($logger)); + } + if (!empty($config['loaders'])) { $loaders = array_map(function ($loader) { return new Reference($loader); }, $config['loaders']); @@ -530,14 +526,6 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB $container->findDefinition('templating.locator')->getClass(), )); - if (in_array('php', $config['engines'], true)) { - $this->addClassesToCompile(array( - 'Symfony\\Component\\Templating\\Storage\\FileStorage', - 'Symfony\\Bundle\\FrameworkBundle\\Templating\\PhpEngine', - 'Symfony\\Bundle\\FrameworkBundle\\Templating\\Loader\\FilesystemLoader', - )); - } - $container->setParameter('templating.engines', $config['engines']); $engines = array_map(function ($engine) { return new Reference('templating.engine.'.$engine); }, $config['engines']); @@ -550,12 +538,32 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB } $container->setAlias('templating', 'templating.engine.delegating'); } + + // configure the PHP engine if needed + if (in_array('php', $config['engines'], true)) { + $loader->load('templating_php.xml'); + + $container->setParameter('templating.helper.form.resources', $config['form']['resources']); + + if ($container->getParameter('kernel.debug')) { + $loader->load('templating_debug.xml'); + + $container->setDefinition('templating.engine.php', $container->findDefinition('debug.templating.engine.php')); + $container->setAlias('debug.templating.engine.php', 'templating.engine.php'); + } + + $this->addClassesToCompile(array( + 'Symfony\\Component\\Templating\\Storage\\FileStorage', + 'Symfony\\Bundle\\FrameworkBundle\\Templating\\PhpEngine', + 'Symfony\\Bundle\\FrameworkBundle\\Templating\\Loader\\FilesystemLoader', + )); + } } /** * Returns a definition for an asset package. */ - private function createPackageDefinition(ContainerBuilder $container, array $httpUrls, array $sslUrls, $version, $format, $name = null) + private function createTemplatingPackageDefinition(ContainerBuilder $container, array $httpUrls, array $sslUrls, $version, $format, $name = null) { if (!$httpUrls) { $package = new DefinitionDecorator('templating.asset.path_package'); diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/old_assets.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/old_assets.xml new file mode 100644 index 000000000000..90d935906d5a --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/old_assets.xml @@ -0,0 +1,37 @@ + + + + + + Symfony\Bundle\FrameworkBundle\Templating\Asset\PathPackage + Symfony\Component\Templating\Asset\UrlPackage + Symfony\Bundle\FrameworkBundle\Templating\Asset\PackageFactory + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml index 59da78fc4168..efec555b87ca 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml @@ -14,6 +14,7 @@ Symfony\Component\Templating\Loader\CacheLoader Symfony\Component\Templating\Loader\ChainLoader Symfony\Bundle\FrameworkBundle\CacheWarmer\TemplateFinder + Symfony\Component\Templating\Helper\CoreAssetsHelper @@ -58,5 +59,15 @@ + + + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml index e0a9234d0234..5b4f8073feeb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml @@ -7,7 +7,6 @@ Symfony\Bundle\FrameworkBundle\Templating\PhpEngine Symfony\Component\Templating\Helper\SlotsHelper - Symfony\Component\Templating\Helper\CoreAssetsHelper Symfony\Bundle\FrameworkBundle\Templating\Helper\ActionsHelper Symfony\Bundle\FrameworkBundle\Templating\Helper\RouterHelper Symfony\Bundle\FrameworkBundle\Templating\Helper\RequestHelper @@ -19,9 +18,6 @@ Symfony\Component\Form\Extension\Templating\TemplatingRendererEngine Symfony\Component\Form\FormRenderer Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables - Symfony\Bundle\FrameworkBundle\Templating\Asset\PathPackage - Symfony\Component\Templating\Asset\UrlPackage - Symfony\Bundle\FrameworkBundle\Templating\Asset\PackageFactory @@ -37,35 +33,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php index c4bd1d372aca..953a9dd9dde7 100644 --- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php +++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php @@ -46,5 +46,24 @@ public function process(ContainerBuilder $container) if ($container->has('request_stack')) { $container->getDefinition('twig.extension.httpfoundation')->addTag('twig.extension'); } + + if ($container->hasParameter('templating.helper.code.file_link_format')) { + $container->getDefinition('twig.extension.code')->replaceArgument(0, $container->getParameter('templating.helper.code.file_link_format')); + } + + if ($container->has('templating')) { + $container->getDefinition('twig.cache_warmer')->addTag('kernel.cache_warmer'); + + if ($container->getParameter('kernel.debug')) { + $container->setDefinition('templating.engine.twig', $container->findDefinition('debug.templating.engine.twig')); + $container->setAlias('debug.templating.engine.twig', 'templating.engine.twig'); + } + } else { + $loader = $container->getDefinition('twig.loader.native_filesystem'); + $loader->addTag('twig.loader'); + $loader->setMethodCalls($container->getDefinition('twig.loader.filesystem')->getMethodCalls()); + + $container->setDefinition('twig.loader.filesystem', $loader); + } } } diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php index 9883daeded94..c9595ff21914 100644 --- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php +++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php @@ -103,9 +103,6 @@ public function load(array $configs, ContainerBuilder $container) if ($container->getParameter('kernel.debug')) { $loader->load('debug.xml'); - - $container->setDefinition('templating.engine.twig', $container->findDefinition('debug.templating.engine.twig')); - $container->setAlias('debug.templating.engine.twig', 'templating.engine.twig'); } if (isset($config['autoescape_service']) && isset($config['autoescape_service_method'])) { diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml index b0a7223287d3..41f9c2d36114 100644 --- a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml +++ b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml @@ -47,11 +47,14 @@ - + + + + @@ -84,7 +87,7 @@ - %templating.helper.code.file_link_format% + %kernel.root_dir% %kernel.charset%