From f74a1f2dc34d8b141e1f4bfbbfa1dbb7d955fe42 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sat, 17 Jan 2015 08:35:04 +0100 Subject: [PATCH] renamed asset_path() to asset() and added a BC layer --- src/Symfony/Bridge/Twig/CHANGELOG.md | 2 +- .../Bridge/Twig/Extension/AssetExtension.php | 73 +++++++++- .../Tests/Extension/AssetExtensionTest.php | 40 ++++++ .../Compiler/TemplatingAssetHelperPass.php | 2 + .../DependencyInjection/Configuration.php | 38 ++++++ .../FrameworkExtension.php | 94 +------------ .../FrameworkBundle/FrameworkBundle.php | 2 - .../Resources/config/assets.xml | 6 +- .../Resources/config/schema/symfony-1.0.xsd | 27 +++- .../Resources/config/templating.xml | 11 -- .../Resources/config/templating_php.xml | 7 + .../Templating/Helper/AssetsHelper.php | 126 ++++++++++++++++++ ...> LegacyTemplatingAssetHelperPassTest.php} | 2 +- .../Fixtures/php/assets.php | 25 ++++ .../DependencyInjection/Fixtures/php/full.php | 14 -- .../Fixtures/php/legacy_templating_assets.php | 23 ++++ ....php => legacy_templating_url_package.php} | 0 .../Fixtures/xml/assets.xml | 23 ++++ .../DependencyInjection/Fixtures/xml/full.xml | 12 +- .../Fixtures/xml/legacy_templating_assets.xml | 23 ++++ ....xml => legacy_templating_url_package.xml} | 0 .../Fixtures/yml/assets.yml | 16 +++ .../DependencyInjection/Fixtures/yml/full.yml | 10 -- .../Fixtures/yml/legacy_templating_assets.yml | 15 +++ ....yml => legacy_templating_url_package.yml} | 0 .../FrameworkExtensionTest.php | 95 ++++++++++--- .../PhpFrameworkExtensionTest.php | 34 +++++ .../Tests/Templating/Helper/AssetsHelper.php | 46 +++++++ .../Bundle/FrameworkBundle/composer.json | 1 + .../Compiler/ExtensionPass.php | 4 - .../TwigBundle/Extension/AssetsExtension.php | 6 +- .../TwigBundle/Resources/config/twig.xml | 9 +- .../Tests/Helper/LegacyAssetsHelperTest.php | 5 + .../Helper/LegacyCoreAssetsHelperTest.php | 2 + 34 files changed, 613 insertions(+), 180 deletions(-) create mode 100644 src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php create mode 100644 src/Symfony/Bundle/FrameworkBundle/Templating/Helper/AssetsHelper.php rename src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/{TemplatingAssetHelperPassTest.php => LegacyTemplatingAssetHelperPassTest.php} (98%) create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets.php create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/legacy_templating_assets.php rename src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/{templating_url_package.php => legacy_templating_url_package.php} (100%) create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets.xml create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/legacy_templating_assets.xml rename src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/{templating_url_package.xml => legacy_templating_url_package.xml} (100%) create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets.yml create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/legacy_templating_assets.yml rename src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/{templating_url_package.yml => legacy_templating_url_package.yml} (100%) create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/AssetsHelper.php diff --git a/src/Symfony/Bridge/Twig/CHANGELOG.md b/src/Symfony/Bridge/Twig/CHANGELOG.md index 9da097f7b0..9781390321 100644 --- a/src/Symfony/Bridge/Twig/CHANGELOG.md +++ b/src/Symfony/Bridge/Twig/CHANGELOG.md @@ -6,7 +6,7 @@ CHANGELOG * added LogoutUrlExtension (provides `logout_url` and `logout_path`) * added an HttpFoundation extension (provides the `absolute_url` and the `relative_path` functions) - * added AssetExtension (provides the `asset_path` function) + * added AssetExtension (provides the `asset` and `asset_version` functions) 2.5.0 ----- diff --git a/src/Symfony/Bridge/Twig/Extension/AssetExtension.php b/src/Symfony/Bridge/Twig/Extension/AssetExtension.php index 3f8bb93c3e..3e9e9f6a78 100644 --- a/src/Symfony/Bridge/Twig/Extension/AssetExtension.php +++ b/src/Symfony/Bridge/Twig/Extension/AssetExtension.php @@ -12,6 +12,7 @@ namespace Symfony\Bridge\Twig\Extension; use Symfony\Component\Asset\Packages; +use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy; /** * Twig extension for the Symfony Asset component. @@ -21,10 +22,16 @@ use Symfony\Component\Asset\Packages; class AssetExtension extends \Twig_Extension { private $packages; + private $foundationExtension; - public function __construct(Packages $packages) + /** + * Passing an HttpFoundationExtension instance as a second argument must not be relied on + * as it's only there to maintain BC with older Symfony version. It will be removed in 3.0. + */ + public function __construct(Packages $packages, HttpFoundationExtension $foundationExtension = null) { $this->packages = $packages; + $this->foundationExtension = $foundationExtension; } /** @@ -33,13 +40,14 @@ class AssetExtension extends \Twig_Extension public function getFunctions() { return array( - new \Twig_SimpleFunction('asset_path', array($this, 'getAssetPath')), + new \Twig_SimpleFunction('asset', array($this, 'getAssetUrl')), new \Twig_SimpleFunction('asset_version', array($this, 'getAssetVersion')), + new \Twig_SimpleFunction('assets_version', array($this, 'getAssetsVersion')), ); } /** - * Returns the public path of an asset. + * Returns the public url/path of an asset. * * If the package used to generate the path is an instance of * UrlPackage, you will always get a URL and not a path. @@ -49,8 +57,20 @@ class AssetExtension extends \Twig_Extension * * @return string The public path of the asset */ - public function getAssetPath($path, $packageName = null) + public function getAssetUrl($path, $packageName = null, $absolute = false, $version = null) { + // BC layer to be removed in 3.0 + if (2 < $count = func_num_args()) { + trigger_error('Generating absolute URLs with the Twig asset() function was deprecated in 2.7 and will be removed in 3.0. Please use absolute_url() instead.', E_USER_DEPRECATED); + if (4 === $count) { + trigger_error('Forcing a version with the Twig asset() function was deprecated in 2.7 and will be removed in 3.0.', E_USER_DEPRECATED); + } + + $args = func_get_args(); + + return $this->getLegacyAssetUrl($path, $packageName, $args[2], isset($args[3]) ? $args[3] : null); + } + return $this->packages->getUrl($path, $packageName); } @@ -67,6 +87,51 @@ class AssetExtension extends \Twig_Extension return $this->packages->getVersion($path, $packageName); } + public function getAssetsVersion($packageName = null) + { + trigger_error('The Twig assets_version() function was deprecated in 2.7 and will be removed in 3.0. Please use asset_version() instead.', E_USER_DEPRECATED); + + return $this->packages->getVersion('/', $packageName); + } + + private function getLegacyAssetUrl($path, $packageName = null, $absolute = false, $version = null) + { + if ($version) { + $package = $this->packages->getPackage($packageName); + + $v = new \ReflectionProperty($package, 'versionStrategy'); + $v->setAccessible(true); + + $currentVersionStrategy = $v->getValue($package); + + $f = new \ReflectionProperty($currentVersionStrategy, 'format'); + $f->setAccessible(true); + $format = $f->getValue($currentVersionStrategy); + + $v->setValue($package, new StaticVersionStrategy($version, $format)); + } + + try { + $url = $this->packages->getUrl($path, $packageName); + } catch (\Exception $e) { + if ($version) { + $v->setValue($package, $currentVersionStrategy); + } + + throw $e; + } + + if ($version) { + $v->setValue($package, $currentVersionStrategy); + } + + if ($absolute) { + return $this->foundationExtension->generateAbsoluteUrl($url); + } + + return $url; + } + /** * Returns the name of the extension. * diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php new file mode 100644 index 0000000000..4c67f4fd19 --- /dev/null +++ b/src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bridge\Twig\Tests\Extension; + +use Symfony\Bridge\Twig\Extension\AssetExtension; +use Symfony\Component\Asset\Package; +use Symfony\Component\Asset\Packages; +use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy; + +class AssetExtensionTest extends \PHPUnit_Framework_TestCase +{ + public function testLegacyGetAssetUrl() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + $foundationExtension = $this->getMockBuilder('Symfony\Bridge\Twig\Extension\HttpFoundationExtension')->disableOriginalConstructor()->getMock(); + $foundationExtension + ->expects($this->any()) + ->method('generateAbsoluteUrl') + ->will($this->returnCallback(function ($arg) { return 'http://localhost/'.$arg; })) + ; + + $package = new Package(new StaticVersionStrategy('22', '%s?version=%s')); + $packages = new Packages($package); + $extension = new AssetExtension($packages, $foundationExtension); + + $this->assertEquals('me.png?version=42', $extension->getAssetUrl('me.png', null, false, '42')); + $this->assertEquals('http://localhost/me.png?version=22', $extension->getAssetUrl('me.png', null, true)); + $this->assertEquals('http://localhost/me.png?version=42', $extension->getAssetUrl('me.png', null, true, '42')); + } +} diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TemplatingAssetHelperPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TemplatingAssetHelperPass.php index 6c0ff55114..5e59391e9c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TemplatingAssetHelperPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TemplatingAssetHelperPass.php @@ -16,6 +16,8 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Reference; +trigger_error('The '.__NAMESPACE__.'\TemplatingAssetHelperPass class is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED); + /** * @deprecated since 2.7, will be removed in 3.0 */ diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index c08e177efb..95aa34c50e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -53,6 +53,44 @@ class Configuration implements ConfigurationInterface return $v; }) ->end() + ->validate() + ->ifTrue(function ($v) { return isset($v['templating']); }) + ->then(function ($v) { + if ($v['templating']['assets_version'] + || count($v['templating']['assets_base_urls']['http']) + || count($v['templating']['assets_base_urls']['ssl']) + || count($v['templating']['packages']) + ) { + trigger_error('The assets settings under framework.templating are deprecated since version 2.7 and will be removed in 3.0. Use the framework.assets configuration key instead', E_USER_DEPRECATED); + + // convert the old configuration to the new one + if (isset($v['assets'])) { + throw new LogicException('You cannot use assets settings under "templating.templating" and "assets" configurations in the same project.'); + } + + $v['assets'] = array( + 'version' => $v['templating']['assets_version'], + 'version_format' => $v['templating']['assets_version_format'], + 'base_path' => '', + 'base_urls' => array_values(array_unique(array_merge($v['templating']['assets_base_urls']['http'], $v['templating']['assets_base_urls']['ssl']))), + 'packages' => array(), + ); + + foreach ($v['templating']['packages'] as $name => $config) { + $v['assets']['packages'][$name] = array( + 'version' => (string) $config['version'], + 'version_format' => $config['version_format'], + 'base_path' => '', + 'base_urls' => array_values(array_unique(array_merge($config['base_urls']['http'], $config['base_urls']['ssl']))), + ); + } + } + + unset($v['templating']['assets_version'], $v['templating']['assets_version_format'], $v['templating']['assets_base_urls'], $v['templating']['packages']); + + return $v; + }) + ->end() ->children() ->scalarNode('secret')->end() ->scalarNode('http_method_override') diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 22ac7d34c4..bbd824e1d1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -49,6 +49,7 @@ class FrameworkExtension extends Extension $loader->load('web.xml'); $loader->load('services.xml'); $loader->load('fragment_renderer.xml'); + $loader->load('assets.xml'); // A translator must always be registered (as support is included by // default in the Form component). If disabled, an identity translator @@ -473,23 +474,6 @@ class FrameworkExtension extends Extension $container->setParameter('templating.helper.code.file_link_format', isset($links[$ide]) ? $links[$ide] : $ide); $container->setParameter('fragment.renderer.hinclude.global_template', $config['hinclude_default_template']); - $loader->load('old_assets.xml'); - - // create package definitions and add them to the assets helper - $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->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); @@ -569,73 +553,6 @@ class FrameworkExtension extends Extension } } - /** - * Returns a definition for an asset package. - */ - private function createTemplatingPackageDefinition(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 assets configuration. * @@ -645,9 +562,7 @@ class FrameworkExtension extends Extension */ private function registerAssetsConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader) { - $loader->load('assets.xml'); - - $defaultVersion = $this->createVersion($container, $config['version'], $config['version_format']); + $defaultVersion = $this->createVersion($container, $config['version'], $config['version_format'], '_default'); $defaultPackage = $this->createPackageDefinition($config['base_path'], $config['base_urls'], $defaultVersion); $container->setDefinition('assets._default_package', $defaultPackage); @@ -658,7 +573,6 @@ class FrameworkExtension extends Extension $version = $defaultVersion; } else { $format = $package['version_format'] ?: $config['version_format']; - $version = $this->createVersion($container, $package['version'], $format, $name); } @@ -700,9 +614,9 @@ class FrameworkExtension extends Extension ; } - private function createVersion(ContainerBuilder $container, $version, $format, $name = null) + private function createVersion(ContainerBuilder $container, $version, $format, $name) { - if (!$version) { + if (null === $version) { return new Reference('assets.empty_version_strategy'); } diff --git a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php index 5ddc397560..499f39c6c9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php +++ b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php @@ -16,7 +16,6 @@ use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddValidatorInit use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConsoleCommandPass; use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass; use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TemplatingPass; -use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TemplatingAssetHelperPass; use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\RoutingResolverPass; use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ProfilerPass; use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslatorPass; @@ -76,7 +75,6 @@ class FrameworkBundle extends Bundle // but as late as possible to get resolved parameters $container->addCompilerPass(new RegisterListenersPass(), PassConfig::TYPE_BEFORE_REMOVING); $container->addCompilerPass(new TemplatingPass()); - $container->addCompilerPass(new TemplatingAssetHelperPass()); $container->addCompilerPass(new AddConstraintValidatorsPass()); $container->addCompilerPass(new AddValidatorInitializersPass()); $container->addCompilerPass(new AddConsoleCommandPass()); diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/assets.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/assets.xml index 4e7a1b8f6b..4f2e1fbf36 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/assets.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/assets.xml @@ -7,10 +7,14 @@ - + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd index cc3cd1de47..652d168a77 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd @@ -18,6 +18,7 @@ + @@ -125,12 +126,34 @@ + + + + + + + + + + + + + + + + + + + + + + - + @@ -146,7 +169,7 @@ - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml index efec555b87..59da78fc41 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml @@ -14,7 +14,6 @@ Symfony\Component\Templating\Loader\CacheLoader Symfony\Component\Templating\Loader\ChainLoader Symfony\Bundle\FrameworkBundle\CacheWarmer\TemplateFinder - Symfony\Component\Templating\Helper\CoreAssetsHelper @@ -59,15 +58,5 @@ - - - - - - - diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml index 5b4f8073fe..556206d43b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml @@ -15,6 +15,7 @@ Symfony\Bundle\FrameworkBundle\Templating\Helper\TranslatorHelper Symfony\Bundle\FrameworkBundle\Templating\Helper\FormHelper Symfony\Bundle\FrameworkBundle\Templating\Helper\StopwatchHelper + Symfony\Bundle\FrameworkBundle\Templating\Helper\AssetsHelper Symfony\Component\Form\Extension\Templating\TemplatingRendererEngine Symfony\Component\Form\FormRenderer Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables @@ -65,6 +66,12 @@ + + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/AssetsHelper.php b/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/AssetsHelper.php new file mode 100644 index 0000000000..dcbb6bfe56 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/AssetsHelper.php @@ -0,0 +1,126 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\FrameworkBundle\Templating\Helper; + +use Symfony\Component\Asset\Packages; +use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy; +use Symfony\Component\Templating\Helper\Helper; + +/** + * AssetsHelper helps manage asset URLs. + * + * @author Fabien Potencier + */ +class AssetsHelper extends Helper +{ + private $packages; + + public function __construct(Packages $packages) + { + $this->packages = $packages; + } + + /** + * Returns the public url/path of an asset. + * + * If the package used to generate the path is an instance of + * UrlPackage, you will always get a URL and not a path. + * + * @param string $path A public path + * @param string $packageName The name of the asset package to use + * + * @return string The public path of the asset + */ + public function getUrl($path, $packageName = null, $version = null) + { + // BC layer to be removed in 3.0 + if (3 === $count = func_num_args()) { + trigger_error('Forcing a version for an asset was deprecated in 2.7 and will be removed in 3.0.', E_USER_DEPRECATED); + + $args = func_get_args(); + + return $this->getLegacyAssetUrl($path, $packageName, $args[2]); + } + + return $this->packages->getUrl($path, $packageName); + } + + /** + * Returns the version of an asset. + * + * @param string $path A public path + * @param string $packageName The name of the asset package to use + * + * @return string The asset version + */ + public function getVersion($path = null, $packageName = null) + { + // no arguments means old getVersion() for default package + if (null === $path) { + trigger_error('The getVersion() method requires a path as a first argument since 2.7 and will be enforced as of 3.0.', E_USER_DEPRECATED); + + return $this->packages->getVersion('/', $packageName); + } + + // path and packageName can only be for the new version + if (null !== $packageName) { + return $this->packages->getVersion($path, $packageName); + } + + // packageName is null and path not, so path is a path or a packageName + try { + $package = $this->packages->getPackage($path); + } catch (\InvalidArgumentException $e) { + // path is not a package, so it should be a path + return $this->packages->getVersion($path); + } + + // path is a packageName, old version + trigger_error('The getVersion() method requires a path as a first argument since 2.7 and will be enforced as of 3.0.', E_USER_DEPRECATED); + + return $this->packages->getVersion('/', $path); + } + + private function getLegacyAssetUrl($path, $packageName = null, $version = null) + { + if ($version) { + $package = $this->packages->getPackage($packageName); + + $v = new \ReflectionProperty($package, 'versionStrategy'); + $v->setAccessible(true); + + $currentVersionStrategy = $v->getValue($package); + + $f = new \ReflectionProperty($currentVersionStrategy, 'format'); + $f->setAccessible(true); + $format = $f->getValue($currentVersionStrategy); + + $v->setValue($package, new StaticVersionStrategy($version, $format)); + } + + $url = $this->packages->getUrl($path, $packageName); + + if ($version) { + $v->setValue($package, $currentVersionStrategy); + } + + return $url; + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return 'assets'; + } +} diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/TemplatingAssetHelperPassTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/LegacyTemplatingAssetHelperPassTest.php similarity index 98% rename from src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/TemplatingAssetHelperPassTest.php rename to src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/LegacyTemplatingAssetHelperPassTest.php index 3a096715e1..10a6e08568 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/TemplatingAssetHelperPassTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/LegacyTemplatingAssetHelperPassTest.php @@ -16,7 +16,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Reference; -class TemplatingAssetHelperPassTest extends \PHPUnit_Framework_TestCase +class LegacyTemplatingAssetHelperPassTest extends \PHPUnit_Framework_TestCase { public function getScopesTests() { diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets.php new file mode 100644 index 0000000000..e3532a7747 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/assets.php @@ -0,0 +1,25 @@ +loadFromExtension('framework', array( + 'assets' => array( + 'version' => 'SomeVersionScheme', + 'base_urls' => 'http://cdn.example.com', + 'version_format' => '%%s?version=%%s', + 'packages' => array( + 'images_path' => array( + 'base_path' => '/foo', + ), + 'images' => array( + 'version' => '1.0.0', + 'base_urls' => array('http://images1.example.com', 'http://images2.example.com'), + ), + 'foo' => array( + 'version' => '1.0.0', + 'version_format' => '%%s-%%s', + ), + 'bar' => array( + 'base_urls' => array('https://bar2.example.com'), + ), + ), + ), +)); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/full.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/full.php index ab356dafd7..679da4161d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/full.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/full.php @@ -39,23 +39,9 @@ $container->loadFromExtension('framework', array( 'save_path' => '/path/to/sessions', ), 'templating' => array( - 'assets_version' => 'SomeVersionScheme', - 'assets_base_urls' => 'http://cdn.example.com', 'cache' => '/path/to/cache', 'engines' => array('php', 'twig'), 'loader' => array('loader.foo', 'loader.bar'), - 'packages' => array( - 'images' => array( - 'version' => '1.0.0', - 'base_urls' => array('http://images1.example.com', 'http://images2.example.com'), - ), - 'foo' => array( - 'version' => '1.0.0', - ), - 'bar' => array( - 'base_urls' => array('http://bar1.example.com', 'http://bar2.example.com'), - ), - ), 'form' => array( 'resources' => array('theme1', 'theme2'), ), diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/legacy_templating_assets.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/legacy_templating_assets.php new file mode 100644 index 0000000000..32bd56b358 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/legacy_templating_assets.php @@ -0,0 +1,23 @@ +loadFromExtension('framework', array( + 'templating' => array( + 'engines' => array('php'), + 'assets_version' => 'SomeVersionScheme', + 'assets_base_urls' => 'http://cdn.example.com', + 'assets_version_format' => '%%s?version=%%s', + 'packages' => array( + 'images' => array( + 'version' => '1.0.0', + 'base_urls' => array('http://images1.example.com', 'http://images2.example.com'), + ), + 'foo' => array( + 'version' => '1.0.0', + 'version_format' => '%%s-%%s', + ), + 'bar' => array( + 'base_urls' => array('https://bar2.example.com'), + ), + ), + ), +)); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/templating_url_package.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/legacy_templating_url_package.php similarity index 100% rename from src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/templating_url_package.php rename to src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/legacy_templating_url_package.php diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets.xml new file mode 100644 index 0000000000..e39e15f900 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/assets.xml @@ -0,0 +1,23 @@ + + + + + + + http://cdn.example.com + + + http://images1.example.com + http://images2.example.com + + + + https://bar2.example.com + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/full.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/full.xml index 024cef66cc..4f41288410 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/full.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/full.xml @@ -24,21 +24,11 @@ application/pdf - + loader.foo loader.bar php twig - http://cdn.example.com - - http://images1.example.com - http://images2.example.com - - - - http://bar1.example.com - http://bar2.example.com - theme1 theme2 diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/legacy_templating_assets.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/legacy_templating_assets.xml new file mode 100644 index 0000000000..963848f767 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/legacy_templating_assets.xml @@ -0,0 +1,23 @@ + + + + + + + php + http://cdn.example.com + + http://images1.example.com + http://images2.example.com + + + + https://bar2.example.com + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/templating_url_package.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/legacy_templating_url_package.xml similarity index 100% rename from src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/templating_url_package.xml rename to src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/legacy_templating_url_package.xml diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets.yml new file mode 100644 index 0000000000..193dc59dfb --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/assets.yml @@ -0,0 +1,16 @@ +framework: + assets: + version: SomeVersionScheme + version_format: %%s?version=%%s + base_urls: http://cdn.example.com + packages: + images_path: + base_path: '/foo' + images: + version: 1.0.0 + base_urls: ["http://images1.example.com", "http://images2.example.com"] + foo: + version: 1.0.0 + version_format: %%s-%%s + bar: + base_urls: ["https://bar2.example.com"] diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/full.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/full.yml index d16f24c4ca..3fd70b7eba 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/full.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/full.yml @@ -30,19 +30,9 @@ framework: gc_maxlifetime: 90000 save_path: /path/to/sessions templating: - assets_version: SomeVersionScheme - assets_base_urls: http://cdn.example.com engines: [php, twig] loader: [loader.foo, loader.bar] cache: /path/to/cache - packages: - images: - version: 1.0.0 - base_urls: ["http://images1.example.com", "http://images2.example.com"] - foo: - version: 1.0.0 - bar: - base_urls: ["http://images1.example.com", "http://images2.example.com"] form: resources: [theme1, theme2] hinclude_default_template: global_hinclude_template diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/legacy_templating_assets.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/legacy_templating_assets.yml new file mode 100644 index 0000000000..e8cc6ce41d --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/legacy_templating_assets.yml @@ -0,0 +1,15 @@ +framework: + templating: + engines: [php] + assets_version: SomeVersionScheme + assets_version_format: %%s?version=%%s + assets_base_urls: http://cdn.example.com + packages: + images: + version: 1.0.0 + base_urls: ["http://images1.example.com", "http://images2.example.com"] + foo: + version: 1.0.0 + version_format: %%s-%%s + bar: + base_urls: "https://bar2.example.com" diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/templating_url_package.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/legacy_templating_url_package.yml similarity index 100% rename from src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/templating_url_package.yml rename to src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/legacy_templating_url_package.yml diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index 8e112baf2a..344065d623 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -14,6 +14,8 @@ namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection; use Symfony\Bundle\FrameworkBundle\Tests\TestCase; use Symfony\Bundle\FrameworkBundle\DependencyInjection\FrameworkExtension; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Loader\ClosureLoader; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\Validator\Validation; @@ -186,21 +188,6 @@ abstract class FrameworkExtensionTest extends TestCase $this->assertTrue($container->hasDefinition('templating.name_parser'), '->registerTemplatingConfiguration() loads templating.xml'); - // default package should have one HTTP base URL and path package SSL URL - $this->assertTrue($container->hasDefinition('templating.asset.default_package.http')); - $package = $container->getDefinition('templating.asset.default_package.http'); - $this->assertInstanceOf('Symfony\\Component\\DependencyInjection\\DefinitionDecorator', $package); - $this->assertEquals('templating.asset.url_package', $package->getParent()); - $arguments = array_values($package->getArguments()); - $this->assertEquals(array('http://cdn.example.com'), $arguments[0]); - $this->assertEquals('SomeVersionScheme', $arguments[1]); - $this->assertEquals('%%s?%%s', $arguments[2]); - - $this->assertTrue($container->hasDefinition('templating.asset.default_package.ssl')); - $package = $container->getDefinition('templating.asset.default_package.ssl'); - $this->assertInstanceOf('Symfony\\Component\\DependencyInjection\\DefinitionDecorator', $package); - $this->assertEquals('templating.asset.path_package', $package->getParent()); - $this->assertEquals('templating.engine.delegating', (string) $container->getAlias('templating'), '->registerTemplatingConfiguration() configures delegating loader if multiple engines are provided'); $this->assertEquals($container->getDefinition('templating.loader.chain'), $container->getDefinition('templating.loader.wrapped'), '->registerTemplatingConfiguration() configures loader chain if multiple loaders are provided'); @@ -216,11 +203,16 @@ abstract class FrameworkExtensionTest extends TestCase $this->assertEquals('global_hinclude_template', $container->getParameter('fragment.renderer.hinclude.global_template'), '->registerTemplatingConfiguration() registers the global hinclude.js template'); } - public function testTemplatingAssetsHelperScopeDependsOnPackageArgumentScopes() + public function testLegacyTemplatingAssets() { - $container = $this->createContainerFromFile('templating_url_package'); + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); - $this->assertNotEquals('request', $container->getDefinition('templating.helper.assets')->getScope(), '->registerTemplatingConfiguration() does not set request scope on assets helper if no packages are request-scoped'); + $this->checkAssetsPackages($this->createContainerFromFile('legacy_templating_assets'), true); + } + + public function testAssets() + { + $this->checkAssetsPackages($this->createContainerFromFile('assets')); } public function testTranslator() @@ -528,4 +520,71 @@ abstract class FrameworkExtensionTest extends TestCase return $container; } + + protected function createContainerFromClosure($closure, $data = array()) + { + $container = $this->createContainer($data); + $container->registerExtension(new FrameworkExtension()); + $loader = new ClosureLoader($container); + $loader->load($closure); + + $container->getCompilerPassConfig()->setOptimizationPasses(array()); + $container->getCompilerPassConfig()->setRemovingPasses(array()); + $container->compile(); + + return $container; + } + + private function checkAssetsPackages(ContainerBuilder $container, $legacy = false) + { + $packages = $container->getDefinition('assets.packages'); + + // default package + $defaultPackage = $container->getDefinition($packages->getArgument(0)); + $this->assertUrlPackage($container, $defaultPackage, array('http://cdn.example.com'), 'SomeVersionScheme', '%%s?version=%%s'); + + // packages + $packages = $packages->getArgument(1); + $this->assertCount($legacy ? 3 : 4, $packages); + + if (!$legacy) { + $package = $container->getDefinition($packages['images_path']); + $this->assertPathPackage($container, $package, '/foo', 'SomeVersionScheme', '%%s?version=%%s'); + } + + $package = $container->getDefinition($packages['images']); + $this->assertUrlPackage($container, $package, array('http://images1.example.com', 'http://images2.example.com'), '1.0.0', $legacy ? '%%s?%%s' : '%%s?version=%%s'); + + $package = $container->getDefinition($packages['foo']); + $this->assertPathPackage($container, $package, '', '1.0.0', '%%s-%%s'); + + $package = $container->getDefinition($packages['bar']); + $this->assertUrlPackage($container, $package, array('https://bar2.example.com'), $legacy ? '' : 'SomeVersionScheme', $legacy ? '%%s?%%s' : '%%s?version=%%s'); + } + + private function assertPathPackage(ContainerBuilder $container, Definition $package, $basePath, $version, $format) + { + $this->assertEquals('assets.path_package', $package->getParent()); + $this->assertEquals($basePath, $package->getArgument(0)); + $this->assertVersionStrategy($container, $package->getArgument(1), $version, $format); + } + + private function assertUrlPackage(ContainerBuilder $container, Definition $package, $baseUrls, $version, $format) + { + $this->assertEquals('assets.url_package', $package->getParent()); + $this->assertEquals($baseUrls, $package->getArgument(0)); + $this->assertVersionStrategy($container, $package->getArgument(1), $version, $format); + } + + private function assertVersionStrategy(ContainerBuilder $container, Reference $reference, $version, $format) + { + $versionStrategy = $container->getDefinition($reference); + if (null === $version) { + $this->assertEquals('assets.empty_version_strategy', (string) $reference); + } else { + $this->assertEquals('assets.static_version_strategy', $versionStrategy->getParent()); + $this->assertEquals($version, $versionStrategy->getArgument(0)); + $this->assertEquals($format, $versionStrategy->getArgument(1)); + } + } } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php index fad373e471..01c73930db 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/PhpFrameworkExtensionTest.php @@ -22,4 +22,38 @@ class PhpFrameworkExtensionTest extends FrameworkExtensionTest $loader = new PhpFileLoader($container, new FileLocator(__DIR__.'/Fixtures/php')); $loader->load($file.'.php'); } + + /** + * @expectedException \LogicException + */ + public function testAssetsCannotHavePathAndUrl() + { + $container = $this->createContainerFromClosure(function ($container) { + $container->loadFromExtension('framework', array( + 'assets' => array( + 'base_urls' => 'http://cdn.example.com', + 'base_path' => '/foo', + ), + )); + }); + } + + /** + * @expectedException \LogicException + */ + public function testAssetPackageCannotHavePathAndUrl() + { + $container = $this->createContainerFromClosure(function ($container) { + $container->loadFromExtension('framework', array( + 'assets' => array( + 'packages' => array( + 'impossible' => array( + 'base_urls' => 'http://cdn.example.com', + 'base_path' => '/foo', + ), + ), + ), + )); + }); + } } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/AssetsHelper.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/AssetsHelper.php new file mode 100644 index 0000000000..7ef641d756 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/AssetsHelper.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\FrameworkBundle\Tests\Templating\Helper; + +use Symfony\Bundle\FrameworkBundle\Templating\Helper\AssetsHelper; +use Symfony\Component\Asset\Package; +use Symfony\Component\Asset\Packages; +use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy; + +class AssetsHelperTest extends \PHPUnit_Framework_TestCase +{ + public function testLegacyGetUrl() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + $package = new Package(new StaticVersionStrategy('22', '%s?version=%s')); + $packages = new Packages($package); + $helper = new AssetsHelper($packages); + + $this->assertEquals('me.png?version=42', $helper->getUrl('me.png', null, '42')); + } + + public function testLegacyGetVersion() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + + $package = new Package(new StaticVersionStrategy('22')); + $imagePackage = new Package(new StaticVersionStrategy('42')); + $packages = new Packages($package, array('images' => $imagePackage)); + $helper = new AssetsHelper($packages); + + $this->assertEquals('22', $helper->getVersion()); + $this->assertEquals('22', $helper->getVersion('/foo')); + $this->assertEquals('42', $helper->getVersion('images')); + $this->assertEquals('42', $helper->getVersion('/foo', 'images')); + } +} diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json index df30fe059e..6d57657ef1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/composer.json +++ b/src/Symfony/Bundle/FrameworkBundle/composer.json @@ -48,6 +48,7 @@ "symfony/yaml": "~2.0,>=2.0.5|~3.0.0" }, "suggest": { + "symfony/asset": "", "symfony/console": "For using the console commands", "symfony/finder": "For using the translation loader and cache warmer", "symfony/form": "For using forms", diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php index 97b6eb68bc..59662e8350 100644 --- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php +++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php @@ -82,9 +82,5 @@ class ExtensionPass implements CompilerPassInterface // we are on Symfony <3.0, where the setContainer method exists $container->getDefinition('twig.app_variable')->addMethodCall('setContainer', array(new Reference('service_container'))); } - - if ($container->has('assets.packages')) { - $container->getDefinition('twig.extension.new_assets')->addTag('twig.extension'); - } } } diff --git a/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php b/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php index 4efc52b0c5..9d03aa7079 100644 --- a/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php +++ b/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php @@ -14,6 +14,8 @@ namespace Symfony\Bundle\TwigBundle\Extension; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\Routing\RequestContext; +trigger_error('The '.__NAMESPACE__.'\AssetsExtension class is deprecated since version 2.7 and will be removed in 3.0. Use the Symfony\Bridge\Twig\Extension\AssetExtension class instead.', E_USER_DEPRECATED); + /** * Twig extension for Symfony assets helper. * @@ -59,8 +61,6 @@ class AssetsExtension extends \Twig_Extension */ public function getAssetUrl($path, $packageName = null, $absolute = false, $version = null) { - trigger_error('The Twig asset() function was deprecated in 2.7 and will be removed in 3.0. Please use asset_path() instead.', E_USER_DEPRECATED); - $url = $this->container->get('templating.helper.assets')->getUrl($path, $packageName, $version); if (!$absolute) { @@ -79,8 +79,6 @@ class AssetsExtension extends \Twig_Extension */ public function getAssetsVersion($packageName = null) { - trigger_error('The Twig assets_version() function was deprecated in 2.7 and will be removed in 3.0. Please use asset_version() instead.', E_USER_DEPRECATED); - return $this->container->get('templating.helper.assets')->getVersion($packageName); } diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml index 64e74274ff..83bb14735d 100644 --- a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml +++ b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml @@ -11,7 +11,6 @@ Symfony\Bundle\TwigBundle\TwigEngine Symfony\Bundle\TwigBundle\CacheWarmer\TemplateCacheCacheWarmer Symfony\Bridge\Twig\Extension\TranslationExtension - Symfony\Bundle\TwigBundle\Extension\AssetsExtension Symfony\Bundle\TwigBundle\Extension\ActionsExtension Symfony\Bridge\Twig\Extension\CodeExtension Symfony\Bridge\Twig\Extension\RoutingExtension @@ -86,14 +85,10 @@ - + - - - - - + diff --git a/src/Symfony/Component/Templating/Tests/Helper/LegacyAssetsHelperTest.php b/src/Symfony/Component/Templating/Tests/Helper/LegacyAssetsHelperTest.php index 8ce72c3fc1..a3e61fb975 100644 --- a/src/Symfony/Component/Templating/Tests/Helper/LegacyAssetsHelperTest.php +++ b/src/Symfony/Component/Templating/Tests/Helper/LegacyAssetsHelperTest.php @@ -15,6 +15,11 @@ use Symfony\Component\Templating\Helper\AssetsHelper; class LegacyAssetsHelperTest extends \PHPUnit_Framework_TestCase { + public function setUp() + { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + } + public function testGetVersion() { $helper = new AssetsHelper(null, array(), 'foo'); diff --git a/src/Symfony/Component/Templating/Tests/Helper/LegacyCoreAssetsHelperTest.php b/src/Symfony/Component/Templating/Tests/Helper/LegacyCoreAssetsHelperTest.php index 6fe6423b67..65695ee6eb 100644 --- a/src/Symfony/Component/Templating/Tests/Helper/LegacyCoreAssetsHelperTest.php +++ b/src/Symfony/Component/Templating/Tests/Helper/LegacyCoreAssetsHelperTest.php @@ -19,6 +19,8 @@ class LegacyCoreAssetsHelperTest extends \PHPUnit_Framework_TestCase protected function setUp() { + $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + $this->package = $this->getMock('Symfony\Component\Templating\Asset\PackageInterface'); }