|
@@ -14,6 +14,7 @@ namespace Symfony\Bundle\FrameworkBundle\DependencyInjection;
|
|
|
use Symfony\Component\Config\Loader\LoaderInterface;
|
|
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|
|
use Symfony\Component\DependencyInjection\Definition;
|
|
|
+use Symfony\Component\DependencyInjection\DefinitionDecorator;
|
|
|
use Symfony\Component\DependencyInjection\Parameter;
|
|
|
use Symfony\Component\DependencyInjection\Reference;
|
|
|
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
|
|
@@ -332,17 +333,19 @@ class FrameworkExtension extends Extension
|
|
|
$loader->load('templating_debug.xml');
|
|
|
}
|
|
|
|
|
|
- $packages = array();
|
|
|
+ // 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']);
|
|
|
+ $container->setDefinition('templating.asset.default_package', $defaultPackage);
|
|
|
+ $namedPackages = array();
|
|
|
foreach ($config['packages'] as $name => $package) {
|
|
|
- $packages[$name] = new Definition('%templating.asset_package.class%', array(
|
|
|
- $package['base_urls'],
|
|
|
- $package['version'],
|
|
|
- ));
|
|
|
+ $namedPackage = $this->createPackageDefinition($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->setParameter('templating.helper.assets.assets_base_urls', isset($config['assets_base_urls']) ? $config['assets_base_urls'] : array());
|
|
|
- $container->setParameter('templating.helper.assets.assets_version', $config['assets_version']);
|
|
|
- $container->getDefinition('templating.helper.assets')->replaceArgument(3, $packages);
|
|
|
+ $container->getDefinition('templating.helper.assets')->setArguments(array(
|
|
|
+ new Reference('templating.asset.default_package'),
|
|
|
+ $namedPackages,
|
|
|
+ ));
|
|
|
|
|
|
if (!empty($config['loaders'])) {
|
|
|
$loaders = array_map(function($loader) { return new Reference($loader); }, $config['loaders']);
|
|
@@ -412,6 +415,73 @@ class FrameworkExtension extends Extension
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Returns a definition for an asset package.
|
|
|
+ */
|
|
|
+ private function createPackageDefinition(ContainerBuilder $container, array $httpUrls, array $sslUrls, $version, $format, $name = null)
|
|
|
+ {
|
|
|
+ if (!$httpUrls) {
|
|
|
+ $package = new DefinitionDecorator('templating.asset.path_package');
|
|
|
+ $package
|
|
|
+ ->setPublic(false)
|
|
|
+ ->setScope('request')
|
|
|
+ ->replaceArgument(1, $version)
|
|
|
+ ->replaceArgument(2, $format)
|
|
|
+ ;
|
|
|
+
|
|
|
+ return $package;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($httpUrls == $sslUrls) {
|
|
|
+ $package = new DefinitionDecorator('templating.asset.url_package');
|
|
|
+ $package
|
|
|
+ ->setPublic(false)
|
|
|
+ ->replaceArgument(0, $sslUrls)
|
|
|
+ ->replaceArgument(1, $version)
|
|
|
+ ->replaceArgument(2, $format)
|
|
|
+ ;
|
|
|
+
|
|
|
+ return $package;
|
|
|
+ }
|
|
|
+
|
|
|
+ $prefix = $name ? 'templating.asset.package.'.$name : 'templating.asset.default_package';
|
|
|
+
|
|
|
+ $httpPackage = new DefinitionDecorator('templating.asset.url_package');
|
|
|
+ $httpPackage
|
|
|
+ ->replaceArgument(0, $httpUrls)
|
|
|
+ ->replaceArgument(1, $version)
|
|
|
+ ->replaceArgument(2, $format)
|
|
|
+ ;
|
|
|
+ $container->setDefinition($prefix.'.http', $httpPackage);
|
|
|
+
|
|
|
+ if ($sslUrls) {
|
|
|
+ $sslPackage = new DefinitionDecorator('templating.asset.url_package');
|
|
|
+ $sslPackage
|
|
|
+ ->replaceArgument(0, $sslUrls)
|
|
|
+ ->replaceArgument(1, $version)
|
|
|
+ ->replaceArgument(2, $format)
|
|
|
+ ;
|
|
|
+ } else {
|
|
|
+ $sslPackage = new DefinitionDecorator('templating.asset.path_package');
|
|
|
+ $sslPackage
|
|
|
+ ->setScope('request')
|
|
|
+ ->replaceArgument(1, $version)
|
|
|
+ ->replaceArgument(2, $format)
|
|
|
+ ;
|
|
|
+ }
|
|
|
+ $container->setDefinition($prefix.'.ssl', $sslPackage);
|
|
|
+
|
|
|
+ $package = new DefinitionDecorator('templating.asset.request_aware_package');
|
|
|
+ $package
|
|
|
+ ->setPublic(false)
|
|
|
+ ->setScope('request')
|
|
|
+ ->replaceArgument(1, $prefix.'.http')
|
|
|
+ ->replaceArgument(2, $prefix.'.ssl')
|
|
|
+ ;
|
|
|
+
|
|
|
+ return $package;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Loads the translator configuration.
|
|
|
*
|