Skip to content

Commit b0bc46f

Browse files
committed
made the old asset layer optional and disable it when using the new one
1 parent 8635a33 commit b0bc46f

File tree

5 files changed

+112
-62
lines changed

5 files changed

+112
-62
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

+63-31
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,31 @@ public function load(array $configs, ContainerBuilder $container)
101101

102102
$this->registerSecurityCsrfConfiguration($config['csrf_protection'], $container, $loader);
103103

104+
$oldAssetsConfigured = false;
105+
if (
106+
isset($config['templating'])
107+
&&
108+
(
109+
count($config['templating']['packages'])
110+
||
111+
count($config['templating']['assets_base_urls']['http'])
112+
||
113+
count($config['templating']['assets_base_urls']['ssl'])
114+
)
115+
) {
116+
$oldAssetsConfigured = true;
117+
}
118+
119+
if (isset($config['assets']) && $oldAssetsConfigured) {
120+
throw new \LogicException('You cannot use the old asset configuration with the new one.');
121+
}
122+
104123
if (isset($config['assets'])) {
105124
$this->registerAssetsConfiguration($config['assets'], $container, $loader);
106125
}
107126

108127
if (isset($config['templating'])) {
109-
$this->registerTemplatingConfiguration($config['templating'], $config['ide'], $container, $loader);
128+
$this->registerTemplatingConfiguration($config['templating'], $config['ide'], $container, $loader, $oldAssetsConfigured);
110129
}
111130

112131
$this->registerValidationConfiguration($config['validation'], $container, $loader);
@@ -459,10 +478,9 @@ private function registerRequestConfiguration(array $config, ContainerBuilder $c
459478
* @param ContainerBuilder $container A ContainerBuilder instance
460479
* @param XmlFileLoader $loader An XmlFileLoader instance
461480
*/
462-
private function registerTemplatingConfiguration(array $config, $ide, ContainerBuilder $container, XmlFileLoader $loader)
481+
private function registerTemplatingConfiguration(array $config, $ide, ContainerBuilder $container, XmlFileLoader $loader, $oldAssetsConfigured)
463482
{
464483
$loader->load('templating.xml');
465-
$loader->load('templating_php.xml');
466484

467485
$links = array(
468486
'textmate' => 'txmt://open?url=file://%%f&line=%%l',
@@ -472,12 +490,23 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB
472490
);
473491

474492
$container->setParameter('templating.helper.code.file_link_format', isset($links[$ide]) ? $links[$ide] : $ide);
475-
$container->setParameter('templating.helper.form.resources', $config['form']['resources']);
476493
$container->setParameter('fragment.renderer.hinclude.global_template', $config['hinclude_default_template']);
477494

478-
if ($container->getParameter('kernel.debug')) {
479-
$loader->load('templating_debug.xml');
495+
if ($oldAssetsConfigured) {
496+
$loader->load('old_assets.xml');
497+
498+
// create package definitions and add them to the assets helper
499+
$defaultPackage = $this->createTemplatingPackageDefinition($container, $config['assets_base_urls']['http'], $config['assets_base_urls']['ssl'], $config['assets_version'], $config['assets_version_format']);
500+
$container->setDefinition('templating.asset.default_package', $defaultPackage);
501+
$namedPackages = array();
502+
foreach ($config['packages'] as $name => $package) {
503+
$namedPackage = $this->createTemplatingPackageDefinition($container, $package['base_urls']['http'], $package['base_urls']['ssl'], $package['version'], $package['version_format'], $name);
504+
$container->setDefinition('templating.asset.package.'.$name, $namedPackage);
505+
$namedPackages[$name] = new Reference('templating.asset.package.'.$name);
506+
}
507+
}
480508

509+
if ($container->getParameter('kernel.debug')) {
481510
$logger = new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE);
482511

483512
$container->getDefinition('templating.loader.cache')
@@ -486,25 +515,8 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB
486515
$container->getDefinition('templating.loader.chain')
487516
->addTag('monolog.logger', array('channel' => 'templating'))
488517
->addMethodCall('setLogger', array($logger));
489-
490-
$container->setDefinition('templating.engine.php', $container->findDefinition('debug.templating.engine.php'));
491-
$container->setAlias('debug.templating.engine.php', 'templating.engine.php');
492518
}
493519

494-
// create package definitions and add them to the assets helper
495-
$defaultPackage = $this->createTemplatingPackageDefinition($container, $config['assets_base_urls']['http'], $config['assets_base_urls']['ssl'], $config['assets_version'], $config['assets_version_format']);
496-
$container->setDefinition('templating.asset.default_package', $defaultPackage);
497-
$namedPackages = array();
498-
foreach ($config['packages'] as $name => $package) {
499-
$namedPackage = $this->createTemplatingPackageDefinition($container, $package['base_urls']['http'], $package['base_urls']['ssl'], $package['version'], $package['version_format'], $name);
500-
$container->setDefinition('templating.asset.package.'.$name, $namedPackage);
501-
$namedPackages[$name] = new Reference('templating.asset.package.'.$name);
502-
}
503-
$container->getDefinition('templating.helper.assets')->setArguments(array(
504-
new Reference('templating.asset.default_package'),
505-
$namedPackages,
506-
));
507-
508520
if (!empty($config['loaders'])) {
509521
$loaders = array_map(function ($loader) { return new Reference($loader); }, $config['loaders']);
510522

@@ -534,14 +546,6 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB
534546
$container->findDefinition('templating.locator')->getClass(),
535547
));
536548

537-
if (in_array('php', $config['engines'], true)) {
538-
$this->addClassesToCompile(array(
539-
'Symfony\\Component\\Templating\\Storage\\FileStorage',
540-
'Symfony\\Bundle\\FrameworkBundle\\Templating\\PhpEngine',
541-
'Symfony\\Bundle\\FrameworkBundle\\Templating\\Loader\\FilesystemLoader',
542-
));
543-
}
544-
545549
$container->setParameter('templating.engines', $config['engines']);
546550
$engines = array_map(function ($engine) { return new Reference('templating.engine.'.$engine); }, $config['engines']);
547551

@@ -554,6 +558,33 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB
554558
}
555559
$container->setAlias('templating', 'templating.engine.delegating');
556560
}
561+
562+
// configure the PHP engine if needed
563+
if (in_array('php', $config['engines'], true)) {
564+
$loader->load('templating_php.xml');
565+
566+
$container->setParameter('templating.helper.form.resources', $config['form']['resources']);
567+
568+
if ($container->getParameter('kernel.debug')) {
569+
$loader->load('templating_debug.xml');
570+
571+
$container->setDefinition('templating.engine.php', $container->findDefinition('debug.templating.engine.php'));
572+
$container->setAlias('debug.templating.engine.php', 'templating.engine.php');
573+
}
574+
575+
if ($oldAssetsConfigured) {
576+
$container->getDefinition('templating.helper.assets')->setArguments(array(
577+
new Reference('templating.asset.default_package'),
578+
$namedPackages,
579+
));
580+
}
581+
582+
$this->addClassesToCompile(array(
583+
'Symfony\\Component\\Templating\\Storage\\FileStorage',
584+
'Symfony\\Bundle\\FrameworkBundle\\Templating\\PhpEngine',
585+
'Symfony\\Bundle\\FrameworkBundle\\Templating\\Loader\\FilesystemLoader',
586+
));
587+
}
557588
}
558589

559590
/**
@@ -679,6 +710,7 @@ private function createPackageDefinition($basePath, array $baseUrls, Reference $
679710
}
680711

681712
$package = new DefinitionDecorator('assets.url_package');
713+
682714
return $package
683715
->setPublic(false)
684716
->replaceArgument(0, $baseUrls)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
7+
<parameters>
8+
<parameter key="templating.asset.path_package.class">Symfony\Bundle\FrameworkBundle\Templating\Asset\PathPackage</parameter>
9+
<parameter key="templating.asset.url_package.class">Symfony\Component\Templating\Asset\UrlPackage</parameter>
10+
<parameter key="templating.asset.package_factory.class">Symfony\Bundle\FrameworkBundle\Templating\Asset\PackageFactory</parameter>
11+
</parameters>
12+
13+
<services>
14+
<service id="templating.asset.path_package" class="%templating.asset.path_package.class%" abstract="true">
15+
<argument type="service" id="request" />
16+
<argument /> <!-- version -->
17+
<argument /> <!-- version format -->
18+
</service>
19+
20+
<service id="templating.asset.url_package" class="%templating.asset.url_package.class%" abstract="true">
21+
<argument /> <!-- base urls -->
22+
<argument /> <!-- version -->
23+
<argument /> <!-- version format -->
24+
</service>
25+
26+
<service id="templating.asset.request_aware_package" class="Symfony\Component\Templating\Asset\PackageInterface" abstract="true">
27+
<factory service="templating.asset.package_factory" method="getPackage" />
28+
<argument type="service" id="request" strict="false" />
29+
<argument /> <!-- HTTP id -->
30+
<argument /> <!-- SSL id -->
31+
</service>
32+
33+
<service id="templating.asset.package_factory" class="%templating.asset.package_factory.class%">
34+
<argument type="service" id="service_container" />
35+
</service>
36+
</services>
37+
</container>

src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml

+5
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<parameter key="templating.loader.cache.class">Symfony\Component\Templating\Loader\CacheLoader</parameter>
1515
<parameter key="templating.loader.chain.class">Symfony\Component\Templating\Loader\ChainLoader</parameter>
1616
<parameter key="templating.finder.class">Symfony\Bundle\FrameworkBundle\CacheWarmer\TemplateFinder</parameter>
17+
<parameter key="templating.globals.class">Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables</parameter>
1718
</parameters>
1819

1920
<services>
@@ -58,5 +59,9 @@
5859
</service>
5960

6061
<service id="templating.loader" alias="templating.loader.filesystem" />
62+
63+
<service id="templating.globals" class="%templating.globals.class%">
64+
<argument type="service" id="service_container" />
65+
</service>
6166
</services>
6267
</container>

src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml

-31
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@
1818
<parameter key="templating.helper.stopwatch.class">Symfony\Bundle\FrameworkBundle\Templating\Helper\StopwatchHelper</parameter>
1919
<parameter key="templating.form.engine.class">Symfony\Component\Form\Extension\Templating\TemplatingRendererEngine</parameter>
2020
<parameter key="templating.form.renderer.class">Symfony\Component\Form\FormRenderer</parameter>
21-
<parameter key="templating.globals.class">Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables</parameter>
22-
<parameter key="templating.asset.path_package.class">Symfony\Bundle\FrameworkBundle\Templating\Asset\PathPackage</parameter>
23-
<parameter key="templating.asset.url_package.class">Symfony\Component\Templating\Asset\UrlPackage</parameter>
24-
<parameter key="templating.asset.package_factory.class">Symfony\Bundle\FrameworkBundle\Templating\Asset\PackageFactory</parameter>
2521
</parameters>
2622

2723
<services>
@@ -43,29 +39,6 @@
4339
<argument type="collection" /> <!-- named packages -->
4440
</service>
4541

46-
<service id="templating.asset.path_package" class="%templating.asset.path_package.class%" abstract="true">
47-
<argument type="service" id="request" />
48-
<argument /> <!-- version -->
49-
<argument /> <!-- version format -->
50-
</service>
51-
52-
<service id="templating.asset.url_package" class="%templating.asset.url_package.class%" abstract="true">
53-
<argument /> <!-- base urls -->
54-
<argument /> <!-- version -->
55-
<argument /> <!-- version format -->
56-
</service>
57-
58-
<service id="templating.asset.request_aware_package" class="Symfony\Component\Templating\Asset\PackageInterface" abstract="true">
59-
<factory service="templating.asset.package_factory" method="getPackage" />
60-
<argument type="service" id="request" strict="false" />
61-
<argument /> <!-- HTTP id -->
62-
<argument /> <!-- SSL id -->
63-
</service>
64-
65-
<service id="templating.asset.package_factory" class="%templating.asset.package_factory.class%">
66-
<argument type="service" id="service_container" />
67-
</service>
68-
6942
<service id="templating.helper.request" class="%templating.helper.request.class%">
7043
<tag name="templating.helper" alias="request" />
7144
<argument type="service" id="request_stack" />
@@ -117,9 +90,5 @@
11790
<argument type="service" id="templating.form.engine" />
11891
<argument type="service" id="form.csrf_provider" on-invalid="null" />
11992
</service>
120-
121-
<service id="templating.globals" class="%templating.globals.class%">
122-
<argument type="service" id="service_container" />
123-
</service>
12493
</services>
12594
</container>

src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php

+7
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,13 @@ public function process(ContainerBuilder $container)
4545

4646
if ($container->has('assets.packages')) {
4747
$container->getDefinition('twig.extension.assets')->addTag('twig.extension');
48+
} elseif ($container->has('templating.asset.packages')) {
49+
$container->getDefinition('twig.extension.assets')
50+
->setClass('Symfony\Bundle\TwigBundle\Extension\AssetsExtension')
51+
->replaceArgument(0, new Reference('service_container'))
52+
->replaceArgument(1, new Reference('router.request_context', ContainerInterface::NULL_ON_INVALID_REFERENCE))
53+
->addTag('twig.extension')
54+
;
4855
}
4956
}
5057
}

0 commit comments

Comments
 (0)