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');