diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 15e0801fb9cdb..6c54f1c906660 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -454,6 +454,11 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB $container->setDefinition('templating.asset.package.'.$name, $namedPackage); $namedPackages[$name] = new Reference('templating.asset.package.'.$name); } + foreach ($container->getParameter('kernel.bundles') as $bundle => $class) { + $bundlePackage = $this->createPackageDefinition($container, $config['assets_base_urls']['http'], $config['assets_base_urls']['ssl'], $config['assets_version'], $config['assets_version_format'], 'bundle.'.$bundle); + $container->setDefinition('templating.asset.package.bundle.'.$bundle, $bundlePackage); + $namedPackages[$bundle] = new Reference('templating.asset.package.bundle.'.$bundle); + } $container->getDefinition('templating.helper.assets')->setArguments(array( new Reference('templating.asset.default_package'), $namedPackages, @@ -528,6 +533,18 @@ function ($v, Reference $ref) use ($container) { */ private function createPackageDefinition(ContainerBuilder $container, array $httpUrls, array $sslUrls, $version, $format, $name = null) { + if (strpos($name, 'bundle.') === 0) { + $package = new DefinitionDecorator('templating.asset.bundle_package'); + $package + ->setPublic(false) + ->setScope('request') + ->replaceArgument(1, substr($name, 7)) + ->replaceArgument(2, $version) + ->replaceArgument(3, $format) + ; + + return $package; + } if (!$httpUrls) { $package = new DefinitionDecorator('templating.asset.path_package'); $package diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml index 0ebb44bbd2708..0ade03f56d05d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml @@ -20,6 +20,7 @@ Symfony\Component\Form\FormRenderer Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables Symfony\Bundle\FrameworkBundle\Templating\Asset\PathPackage + Symfony\Bundle\FrameworkBundle\Templating\Asset\BundlePackage Symfony\Component\Templating\Asset\UrlPackage Symfony\Bundle\FrameworkBundle\Templating\Asset\PackageFactory @@ -49,6 +50,13 @@ + + + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Templating/Asset/BundlePackage.php b/src/Symfony/Bundle/FrameworkBundle/Templating/Asset/BundlePackage.php new file mode 100644 index 0000000000000..e401ef6641d5c --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Templating/Asset/BundlePackage.php @@ -0,0 +1,25 @@ +bundleDir = 'bundles/' . strtolower(str_replace('Bundle', '', $bundleName)); + } + + public function getUrl($path, $version = null) + { + if (isset($this->bundleDir)) + $path = $this->bundleDir . '/' . ltrim($path, '/'); + + return parent::getUrl($path, $version); + } + +} diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index 7bed3b042ce0b..35ccae328c594 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -200,13 +200,6 @@ public function testTemplating() $this->assertEquals(array('FrameworkBundle:Form', 'theme1', 'theme2'), $container->getParameter('templating.helper.form.resources'), '->registerTemplatingConfiguration() registers the theme and adds the base theme'); } - public function testTemplatingAssetsHelperScopeDependsOnPackageArgumentScopes() - { - $container = $this->createContainerFromFile('templating_url_package'); - - $this->assertNotEquals('request', $container->getDefinition('templating.helper.assets')->getScope(), '->registerTemplatingConfiguration() does not set request scope on assets helper if no packages are request-scoped'); - } - public function testTranslator() { $container = $this->createContainerFromFile('full');