From c264583f28cfc7129c58e4d5624306064a96af47 Mon Sep 17 00:00:00 2001 From: Valentin Udaltsov Date: Wed, 13 Nov 2019 08:03:57 +0300 Subject: [PATCH] [Messenger] Perform no deep merging of bus middleware --- .../Bundle/FrameworkBundle/CHANGELOG.md | 3 +- .../DependencyInjection/Configuration.php | 1 + .../DependencyInjection/ConfigurationTest.php | 58 +++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index 60e1e319f719d..0220844b2697d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -17,10 +17,11 @@ CHANGELOG * Overriding the methods `KernelTestCase::tearDown()` and `WebTestCase::tearDown()` without the `void` return-type is deprecated. * Added new `error_controller` configuration to handle system exceptions * Added sort option for `translation:update` command. - * [BC Break] The `framework.messenger.routing.senders` config key is not deep merged anymore. + * [BC Break] The `framework.messenger.routing.senders` config key is not deeply merged anymore. * Added `secrets:*` commands and `%env(secret:...)%` processor to deal with secrets seamlessly. * Made `framework.session.handler_id` accept a DSN * Marked the `RouterDataCollector` class as `@final`. + * [BC Break] The `framework.messenger.buses..middleware` config key is not deeply merged anymore. 4.3.0 ----- diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 405aff41d7fed..c99106299a588 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -1293,6 +1293,7 @@ function ($a) { ->defaultTrue() ->end() ->arrayNode('middleware') + ->performNoDeepMerging() ->beforeNormalization() ->ifTrue(function ($v) { return \is_string($v) || (\is_array($v) && !\is_int(key($v))); }) ->then(function ($v) { return [$v]; }) diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index f79897a6badd0..a95e649c80c91 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -271,6 +271,64 @@ public function testItShowANiceMessageIfTwoMessengerBusesAreConfiguredButNoDefau ]); } + public function testBusMiddlewareDontMerge() + { + $processor = new Processor(); + $configuration = new Configuration(true); + $config = $processor->processConfiguration($configuration, [ + [ + 'messenger' => [ + 'default_bus' => 'existing_bus', + 'buses' => [ + 'existing_bus' => [ + 'middleware' => 'existing_bus.middleware', + ], + 'common_bus' => [ + 'default_middleware' => false, + 'middleware' => 'common_bus.old_middleware', + ], + ], + ], + ], + [ + 'messenger' => [ + 'buses' => [ + 'common_bus' => [ + 'middleware' => 'common_bus.new_middleware', + ], + 'new_bus' => [ + 'middleware' => 'new_bus.middleware', + ], + ], + ], + ], + ]); + + $this->assertEquals( + [ + 'existing_bus' => [ + 'default_middleware' => true, + 'middleware' => [ + ['id' => 'existing_bus.middleware', 'arguments' => []], + ], + ], + 'common_bus' => [ + 'default_middleware' => false, + 'middleware' => [ + ['id' => 'common_bus.new_middleware', 'arguments' => []], + ], + ], + 'new_bus' => [ + 'default_middleware' => true, + 'middleware' => [ + ['id' => 'new_bus.middleware', 'arguments' => []], + ], + ], + ], + $config['messenger']['buses'] + ); + } + protected static function getBundleDefaultConfig() { return [