From 6217ff7b6fed4f714155a7cc197a9e0bceae29ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20TAMARELLE?= Date: Thu, 1 Oct 2020 00:46:17 +0200 Subject: [PATCH] =?UTF-8?q?[Asset]=C2=A0Add=20tag=20assets.package=20to=20?= =?UTF-8?q?register=20asset=20packages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Autoconfiguration with PackageInterface --- src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md | 1 + .../DependencyInjection/Compiler/UnusedTagsPass.php | 1 + .../DependencyInjection/FrameworkExtension.php | 13 +++++-------- .../FrameworkBundle/Resources/config/assets.php | 6 ++++-- .../DependencyInjection/FrameworkExtensionTest.php | 9 +++++++-- src/Symfony/Component/Asset/Packages.php | 2 +- src/Symfony/Component/Asset/Tests/PackagesTest.php | 2 +- 7 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index 61edb7de0e37..ee9bf5f1a424 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -11,6 +11,7 @@ CHANGELOG * Added the `event_dispatcher.dispatcher` tag * Added `assertResponseFormatSame()` in `BrowserKitAssertionsTrait` * Add support for configuring UUID factory services + * Add tag `assets.package` to register asset packages 5.2.0 ----- diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/UnusedTagsPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/UnusedTagsPass.php index a38cde35d116..ded8b9002860 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/UnusedTagsPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/UnusedTagsPass.php @@ -23,6 +23,7 @@ class UnusedTagsPass implements CompilerPassInterface { private $knownTags = [ 'annotations.cached_reader', + 'assets.package', 'auto_alias', 'cache.pool', 'cache.pool.clearer', diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index ac528cbc3c29..4989651af314 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -471,6 +471,8 @@ public function load(array $configs, ContainerBuilder $container) $loader->load('mime_type.php'); } + $container->registerForAutoconfiguration(PackageInterface::class) + ->addTag('assets.package'); $container->registerForAutoconfiguration(Command::class) ->addTag('console.command'); $container->registerForAutoconfiguration(ResourceCheckerInterface::class) @@ -1095,7 +1097,6 @@ private function registerAssetsConfiguration(array $config, ContainerBuilder $co $defaultPackage = $this->createPackageDefinition($config['base_path'], $config['base_urls'], $defaultVersion); $container->setDefinition('assets._default_package', $defaultPackage); - $namedPackages = []; foreach ($config['packages'] as $name => $package) { if (null !== $package['version_strategy']) { $version = new Reference($package['version_strategy']); @@ -1109,15 +1110,11 @@ private function registerAssetsConfiguration(array $config, ContainerBuilder $co $version = $this->createVersion($container, $version, $format, $package['json_manifest_path'], $name); } - $container->setDefinition('assets._package_'.$name, $this->createPackageDefinition($package['base_path'], $package['base_urls'], $version)); + $packageDefinition = $this->createPackageDefinition($package['base_path'], $package['base_urls'], $version) + ->addTag('assets.package', ['package' => $name]); + $container->setDefinition('assets._package_'.$name, $packageDefinition); $container->registerAliasForArgument('assets._package_'.$name, PackageInterface::class, $name.'.package'); - $namedPackages[$name] = new Reference('assets._package_'.$name); } - - $container->getDefinition('assets.packages') - ->replaceArgument(0, new Reference('assets._default_package')) - ->replaceArgument(1, $namedPackages) - ; } /** diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/assets.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/assets.php index eb25977ec8a7..a6f278743a75 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/assets.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/assets.php @@ -30,8 +30,8 @@ $container->services() ->set('assets.packages', Packages::class) ->args([ - service('assets.empty_package'), - [], + service('assets._default_package'), + tagged_iterator('assets.package', 'package'), ]) ->alias(Packages::class, 'assets.packages') @@ -41,6 +41,8 @@ service('assets.empty_version_strategy'), ]) + ->alias('assets._default_package', 'assets.empty_package') + ->set('assets.context', RequestStackContext::class) ->args([ service('request_stack'), diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index 7cd3f083685a..cba061a34792 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -603,8 +603,13 @@ public function testAssets() $this->assertUrlPackage($container, $defaultPackage, ['http://cdn.example.com'], 'SomeVersionScheme', '%%s?version=%%s'); // packages - $packages = $packages->getArgument(1); - $this->assertCount(9, $packages); + $packageTags = $container->findTaggedServiceIds('assets.package'); + $this->assertCount(9, $packageTags); + + $packages = []; + foreach ($packageTags as $serviceId => $tagAttributes) { + $packages[$tagAttributes[0]['package']] = $serviceId; + } $package = $container->getDefinition((string) $packages['images_path']); $this->assertPathPackage($container, $package, '/foo', 'SomeVersionScheme', '%%s?version=%%s'); diff --git a/src/Symfony/Component/Asset/Packages.php b/src/Symfony/Component/Asset/Packages.php index 12aba726da62..2afee853c523 100644 --- a/src/Symfony/Component/Asset/Packages.php +++ b/src/Symfony/Component/Asset/Packages.php @@ -28,7 +28,7 @@ class Packages /** * @param PackageInterface[] $packages Additional packages indexed by name */ - public function __construct(PackageInterface $defaultPackage = null, array $packages = []) + public function __construct(PackageInterface $defaultPackage = null, iterable $packages = []) { $this->defaultPackage = $defaultPackage; diff --git a/src/Symfony/Component/Asset/Tests/PackagesTest.php b/src/Symfony/Component/Asset/Tests/PackagesTest.php index 38044a93654e..54ded7d4c142 100644 --- a/src/Symfony/Component/Asset/Tests/PackagesTest.php +++ b/src/Symfony/Component/Asset/Tests/PackagesTest.php @@ -51,7 +51,7 @@ public function testGetUrl() { $packages = new Packages( new Package(new StaticVersionStrategy('default')), - ['a' => new Package(new StaticVersionStrategy('a'))] + new \ArrayIterator(['a' => new Package(new StaticVersionStrategy('a'))]) ); $this->assertSame('/foo?default', $packages->getUrl('/foo'));