From ab8fb1868f3576b17e4b5a0a57c875cfadbb2bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Sch=C3=A4dlich?= Date: Mon, 29 Apr 2019 23:59:34 +0200 Subject: [PATCH] [DI] deprecates tag !tagged in favor of !tagged_iterator --- UPGRADE-4.4.md | 21 +++++++++++++++++++ UPGRADE-5.0.md | 21 +++++++++++++++++++ .../Resources/config/messenger.xml | 2 +- .../Resources/config/services.xml | 6 +++--- .../Bundle/FrameworkBundle/composer.json | 2 +- .../DependencyInjection/CHANGELOG.md | 1 + .../DependencyInjection/Dumper/XmlDumper.php | 2 +- .../DependencyInjection/Dumper/YamlDumper.php | 2 +- .../Configurator/ContainerConfigurator.php | 12 +++++++++++ .../Loader/XmlFileLoader.php | 3 +++ .../Loader/YamlFileLoader.php | 6 +++++- .../schema/dic/services/services-1.0.xsd | 2 ++ .../Fixtures/config/anonymous.expected.yml | 2 +- .../Tests/Fixtures/config/anonymous.php | 2 +- .../Tests/Fixtures/config/services9.php | 2 +- .../Tests/Fixtures/xml/services9.xml | 2 +- .../xml/services_with_tagged_arguments.xml | 2 +- .../yaml/service_instanceof_factory.yml | 2 +- .../Tests/Fixtures/yaml/services9.yml | 2 +- .../yaml/services_with_tagged_argument.yml | 2 +- 20 files changed, 80 insertions(+), 16 deletions(-) diff --git a/UPGRADE-4.4.md b/UPGRADE-4.4.md index e9cee836e7..83b7c58d46 100644 --- a/UPGRADE-4.4.md +++ b/UPGRADE-4.4.md @@ -24,6 +24,27 @@ DependencyInjection my_service: factory: ['@factory_service', method] ``` + * Deprecated `tagged` in favor of `tagged_iterator` + + Before: + ```yaml + services: + App\Handler: + tags: ['app.handler'] + + App\HandlerCollection: + arguments: [!tagged app.handler] + ``` + + After: + ```yaml + services: + App\Handler: + tags: ['app.handler'] + + App\HandlerCollection: + arguments: [!tagged_iterator app.handler] + ``` MonologBridge -------------- diff --git a/UPGRADE-5.0.md b/UPGRADE-5.0.md index 49ccf3aa0b..6838418f10 100644 --- a/UPGRADE-5.0.md +++ b/UPGRADE-5.0.md @@ -84,6 +84,27 @@ DependencyInjection my_service: factory: ['@factory_service', method] ``` + * Removed `tagged` in favor of `tagged_iterator` + + Before: + ```yaml + services: + App\Handler: + tags: ['app.handler'] + + App\HandlerCollection: + arguments: [!tagged app.handler] + ``` + + After: + ```yaml + services: + App\Handler: + tags: ['app.handler'] + + App\HandlerCollection: + arguments: [!tagged_iterator app.handler] + ``` DoctrineBridge -------------- diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml index a060b723b8..ac0fcb47a3 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml @@ -61,7 +61,7 @@ - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml index 01e93f131a..10e641c83d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml @@ -70,13 +70,13 @@ - + %kernel.debug% %kernel.cache_dir%/%kernel.container_class%Deprecations.log - + @@ -99,7 +99,7 @@ - + diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json index b6f7a2c7bc..de007cd0b5 100644 --- a/src/Symfony/Bundle/FrameworkBundle/composer.json +++ b/src/Symfony/Bundle/FrameworkBundle/composer.json @@ -20,7 +20,7 @@ "ext-xml": "*", "symfony/cache": "^4.3|^5.0", "symfony/config": "^4.2|^5.0", - "symfony/dependency-injection": "^4.3|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", "symfony/http-foundation": "^4.3|^5.0", "symfony/http-kernel": "^4.3|^5.0", "symfony/polyfill-mbstring": "~1.0", diff --git a/src/Symfony/Component/DependencyInjection/CHANGELOG.md b/src/Symfony/Component/DependencyInjection/CHANGELOG.md index 152a17ce9a..7d30dbc646 100644 --- a/src/Symfony/Component/DependencyInjection/CHANGELOG.md +++ b/src/Symfony/Component/DependencyInjection/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG ----- * deprecated support for short factories and short configurators in Yaml + * deprecated `tagged` in favor of `tagged_iterator` 4.3.0 ----- diff --git a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php index 42ee0a25ff..ca7bb60a9b 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php @@ -287,7 +287,7 @@ class XmlDumper extends Dumper $element->setAttribute('type', 'collection'); $this->convertParameters($value, $type, $element, 'key'); } elseif ($value instanceof TaggedIteratorArgument || ($value instanceof ServiceLocatorArgument && $tag = $value->getTaggedIteratorArgument())) { - $element->setAttribute('type', $value instanceof TaggedIteratorArgument ? 'tagged' : 'tagged_locator'); + $element->setAttribute('type', $value instanceof TaggedIteratorArgument ? 'tagged_iterator' : 'tagged_locator'); $element->setAttribute('tag', $tag->getTag()); if (null !== $tag->getIndexAttribute()) { diff --git a/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php index 89dae636de..cb89bb1758 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php @@ -248,7 +248,7 @@ class YamlDumper extends Dumper } } - return new TaggedValue($value instanceof TaggedIteratorArgument ? 'tagged' : 'tagged_locator', $content); + return new TaggedValue($value instanceof TaggedIteratorArgument ? 'tagged_iterator' : 'tagged_locator', $content); } if ($value instanceof IteratorArgument) { diff --git a/src/Symfony/Component/DependencyInjection/Loader/Configurator/ContainerConfigurator.php b/src/Symfony/Component/DependencyInjection/Loader/Configurator/ContainerConfigurator.php index 87b066faf5..87beeaa392 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/Configurator/ContainerConfigurator.php +++ b/src/Symfony/Component/DependencyInjection/Loader/Configurator/ContainerConfigurator.php @@ -115,8 +115,20 @@ function iterator(array $values): IteratorArgument /** * Creates a lazy iterator by tag name. + * + * @deprecated since Symfony 4.4, to be removed in 5.0, use "tagged_iterator" instead. */ function tagged(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null): TaggedIteratorArgument +{ + @trigger_error(__NAMESPACE__.'\tagged() is deprecated since Symfony 4.4 and will be removed in 5.0, use '.__NAMESPACE__.'\tagged_iterator() instead.', E_USER_DEPRECATED); + + return new TaggedIteratorArgument($tag, $indexAttribute, $defaultIndexMethod); +} + +/** + * Creates a lazy iterator by tag name. + */ +function tagged_iterator(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null): TaggedIteratorArgument { return new TaggedIteratorArgument($tag, $indexAttribute, $defaultIndexMethod); } diff --git a/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php b/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php index bbe2d55695..3980b8618e 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php +++ b/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php @@ -545,6 +545,9 @@ class XmlFileLoader extends FileLoader } break; case 'tagged': + @trigger_error(sprintf('Type "%s" of tag <%s> in "%s" is deprecated since Symfony 4.4 and will be removed in 5.0, use "tagged_iterator" instead.', $arg->getAttribute('type'), $name, $file), E_USER_DEPRECATED); + // no break + case 'tagged_iterator': case 'tagged_locator': $type = $arg->getAttribute('type'); $forLocator = 'tagged_locator' === $type; diff --git a/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php b/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php index cbb39ae035..25cb14b193 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php +++ b/src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php @@ -725,7 +725,11 @@ class YamlFileLoader extends FileLoader throw new InvalidArgumentException(sprintf('"!service_locator" tag only accepts maps of "@service" references in "%s".', $file)); } } - if (\in_array($value->getTag(), ['tagged', 'tagged_locator'], true)) { + if (\in_array($value->getTag(), ['tagged', 'tagged_iterator', 'tagged_locator'], true)) { + if ('tagged' === $value->getTag()) { + @trigger_error('"!tagged" is deprecated since Symfony 4.4 and will be removed in 5.0, use "!tagged_iterator" instead.', E_USER_DEPRECATED); + } + $forLocator = 'tagged_locator' === $value->getTag(); if (\is_string($argument) && $argument) { diff --git a/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd b/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd index 05efb9067f..2da07fde4e 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd +++ b/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd @@ -264,7 +264,9 @@ + + diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/anonymous.expected.yml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/anonymous.expected.yml index b425e53cb9..c6a6820275 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/anonymous.expected.yml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/anonymous.expected.yml @@ -7,7 +7,7 @@ services: listener_aggregator: class: Bar\FooClass public: true - arguments: [!tagged listener] + arguments: [!tagged_iterator listener] .2_stdClass~%s: class: stdClass public: false diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/anonymous.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/anonymous.php index 27fc96fc9a..112b162bca 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/anonymous.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/anonymous.php @@ -15,7 +15,7 @@ return function (ContainerConfigurator $c) { ->decorate('decorated', 'decorator42') ->args([ref('decorator42')]); - $s->set('listener_aggregator', FooClass::class)->public()->args([tagged('listener')]); + $s->set('listener_aggregator', FooClass::class)->public()->args([tagged_iterator('listener')]); $s->set(null, stdClass::class)->tag('listener'); }; diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/services9.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/services9.php index 4a7172b46c..04f5858e6b 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/services9.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/services9.php @@ -128,7 +128,7 @@ return function (ContainerConfigurator $c) { $s->set('tagged_iterator', 'Bar') ->public() - ->args([tagged('foo')]); + ->args([tagged_iterator('foo')]); $s->set('runtime_error', 'stdClass') ->args([new Reference('errored_definition', ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE)]) diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services9.xml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services9.xml index de738521d5..55ec20ee10 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services9.xml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services9.xml @@ -142,7 +142,7 @@ - + diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services_with_tagged_arguments.xml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services_with_tagged_arguments.xml index e3e51d352d..fcf27a8249 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services_with_tagged_arguments.xml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services_with_tagged_arguments.xml @@ -6,7 +6,7 @@ - + diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/service_instanceof_factory.yml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/service_instanceof_factory.yml index 4ae8303855..0c90e6bfb3 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/service_instanceof_factory.yml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/service_instanceof_factory.yml @@ -8,7 +8,7 @@ services: public: true Symfony\Component\DependencyInjection\Tests\Fixtures\BarFactory: - arguments: [!tagged 'bar'] + arguments: [!tagged_iterator 'bar'] Symfony\Component\DependencyInjection\Tests\Fixtures\BarInterface: factory: ['@Symfony\Component\DependencyInjection\Tests\Fixtures\BarFactory', 'getDefaultBar'] diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services9.yml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services9.yml index 55528921dc..fd2be046f8 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services9.yml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services9.yml @@ -157,7 +157,7 @@ services: tagged_iterator: class: Bar arguments: - - !tagged foo + - !tagged_iterator foo public: true Psr\Container\ContainerInterface: alias: service_container diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services_with_tagged_argument.yml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services_with_tagged_argument.yml index 5e071d3278..b30aeb7bff 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services_with_tagged_argument.yml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services_with_tagged_argument.yml @@ -10,7 +10,7 @@ services: - { name: foo } foo_service_tagged_iterator: class: Bar - arguments: [!tagged { tag: foo, index_by: barfoo, default_index_method: foobar }] + arguments: [!tagged_iterator { tag: foo, index_by: barfoo, default_index_method: foobar }] foo_service_tagged_locator: class: Bar arguments: [!tagged_locator { tag: foo, index_by: barfoo, default_index_method: foobar }]