From e62a0c97ecd499a879c5ad01bef49950aff2083d Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 09:36:55 +0100 Subject: [PATCH 01/24] Add a middleware that wraps all handlers in one Doctrine transaction. --- .../DependencyInjection/Configuration.php | 6 ++ .../Resources/config/messenger.xml | 7 +++ .../WrapsMessageHandlingInTransaction.php | 62 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 15df976355909..c2dd9b1555650 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -984,6 +984,12 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode) ->end() ->end() ->end() + ->arrayNode('doctrine') + ->canBeEnabled() + ->children() + ->scalarNode('entity_manager')->info('The name of the entity manager to use')->defaultValue('default')->end() + ->end() + ->end() ->end() ->end() ->end() diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml index 49bbcfff6804e..efe8ea337c4df 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml @@ -25,6 +25,13 @@ + + + + + + + diff --git a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php new file mode 100644 index 0000000000000..22f1c918b3e51 --- /dev/null +++ b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Messenger\Middleware; + +use Doctrine\Common\Persistence\ManagerRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Messenger\MiddlewareInterface; + +/** + * Wraps all handlers in a single doctrine transaction. + * + * @author Tobias Nyholm + */ +class WrapsMessageHandlingInTransaction implements MiddlewareInterface +{ + /** + * @var ManagerRegistry + */ + private $managerRegistry; + + /** + * @var string + */ + private $entityManagerName; + + /** + * @param ManagerRegistry $managerRegistry + * @param string $entityManagerName + */ + public function __construct(ManagerRegistry $managerRegistry, string $entityManagerName = null) + { + $this->managerRegistry = $managerRegistry; + $this->entityManagerName = $entityManagerName ?? 'default'; + } + + public function handle($message, callable $next) + { + /** @var $entityManager EntityManagerInterface */ + $entityManager = $this->managerRegistry->getManager($this->entityManagerName); + + try { + $entityManager->transactional( + function () use ($message, $next) { + $next($message); + } + ); + } catch (\Throwable $exception) { + $this->managerRegistry->resetManager($this->entityManagerName); + + throw $exception; + } + } +} From 78f021dbdb21d5c695b837e58261edf35011f596 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 09:40:55 +0100 Subject: [PATCH 02/24] Updated extension --- .../DependencyInjection/FrameworkExtension.php | 4 ++++ .../Middleware/WrapsMessageHandlingInTransaction.php | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 6f06557947368..ee4e7c9393380 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1445,6 +1445,10 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder $container->getDefinition('messenger.sender_locator')->replaceArgument(0, $senderLocatorMapping); $container->getDefinition('messenger.asynchronous.routing.sender_locator')->replaceArgument(1, $messageToSenderIdsMapping); + + if ($config['doctrine']['enabled']) { + $container->getDefinition('messenger.middleware.doctrine_transaction')->replaceArgument(1, $config['doctrine']['entity_manager']); + } } private function registerCacheConfiguration(array $config, ContainerBuilder $container) diff --git a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php index 22f1c918b3e51..c9bde0f168e19 100644 --- a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php +++ b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php @@ -36,10 +36,10 @@ class WrapsMessageHandlingInTransaction implements MiddlewareInterface * @param ManagerRegistry $managerRegistry * @param string $entityManagerName */ - public function __construct(ManagerRegistry $managerRegistry, string $entityManagerName = null) + public function __construct(ManagerRegistry $managerRegistry, string $entityManagerName) { $this->managerRegistry = $managerRegistry; - $this->entityManagerName = $entityManagerName ?? 'default'; + $this->entityManagerName = $entityManagerName; } public function handle($message, callable $next) From 50f2cb8aac143bc7b58c1cde1f5da29058052062 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 09:42:26 +0100 Subject: [PATCH 03/24] cs --- .../Messenger/Middleware/WrapsMessageHandlingInTransaction.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php index c9bde0f168e19..0a48f1235a06d 100644 --- a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php +++ b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php @@ -34,7 +34,7 @@ class WrapsMessageHandlingInTransaction implements MiddlewareInterface /** * @param ManagerRegistry $managerRegistry - * @param string $entityManagerName + * @param string $entityManagerName */ public function __construct(ManagerRegistry $managerRegistry, string $entityManagerName) { From 11a3aab4be9f2f904a487c301b375822de0f4f49 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 10:10:51 +0100 Subject: [PATCH 04/24] Fixed tests --- .../FrameworkBundle/DependencyInjection/FrameworkExtension.php | 2 ++ .../Tests/DependencyInjection/ConfigurationTest.php | 1 + 2 files changed, 3 insertions(+) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index ee4e7c9393380..0d1bc45b549ac 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1448,6 +1448,8 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder if ($config['doctrine']['enabled']) { $container->getDefinition('messenger.middleware.doctrine_transaction')->replaceArgument(1, $config['doctrine']['entity_manager']); + } else { + $container->removeDefinition('messenger.middleware.doctrine_transaction'); } } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index 9f9e13317d7db..8aa7466ff051e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -253,6 +253,7 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor 'messenger' => array( 'enabled' => !class_exists(FullStack::class) && class_exists(MessageBusInterface::class), 'routing' => array(), + 'doctrine' => array(), ), ); } From 373a2d42aa5bc12d363b4bb005f13ac78c85b854 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 10:14:56 +0100 Subject: [PATCH 05/24] Handle a return value --- .../Middleware/WrapsMessageHandlingInTransaction.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php index 0a48f1235a06d..07c7838c76323 100644 --- a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php +++ b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php @@ -47,10 +47,11 @@ public function handle($message, callable $next) /** @var $entityManager EntityManagerInterface */ $entityManager = $this->managerRegistry->getManager($this->entityManagerName); + $result = null; try { $entityManager->transactional( - function () use ($message, $next) { - $next($message); + function () use ($message, $next, &$result) { + $result = $next($message); } ); } catch (\Throwable $exception) { @@ -58,5 +59,7 @@ function () use ($message, $next) { throw $exception; } + + return $result; } } From 4f54988dceba2dd6f5f27371df6b3ff04fb67aed Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 10:41:57 +0100 Subject: [PATCH 06/24] minor --- .../Tests/DependencyInjection/ConfigurationTest.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index 8aa7466ff051e..c22e6cfbc8b6b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -253,7 +253,10 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor 'messenger' => array( 'enabled' => !class_exists(FullStack::class) && class_exists(MessageBusInterface::class), 'routing' => array(), - 'doctrine' => array(), + 'doctrine' => array( + 'enabled' => false, + 'entity_manager' => 'default', + ), ), ); } From 1eb6f4dfe8088eef1b0709e7ad0f2b0004349a6a Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 11:21:46 +0100 Subject: [PATCH 07/24] Updates according to feedback --- .../DependencyInjection/Configuration.php | 4 ++-- .../DependencyInjection/ConfigurationTest.php | 4 ++-- .../WrapsMessageHandlingInTransaction.php | 16 ++++------------ 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index c2dd9b1555650..e24712133dea7 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -984,10 +984,10 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode) ->end() ->end() ->end() - ->arrayNode('doctrine') + ->arrayNode('doctrine_transaction') ->canBeEnabled() ->children() - ->scalarNode('entity_manager')->info('The name of the entity manager to use')->defaultValue('default')->end() + ->scalarNode('entity_manager_name')->info('The name of the entity manager to use')->defaultValue('default')->end() ->end() ->end() ->end() diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index c22e6cfbc8b6b..d5d6cdb69ccd1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -253,9 +253,9 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor 'messenger' => array( 'enabled' => !class_exists(FullStack::class) && class_exists(MessageBusInterface::class), 'routing' => array(), - 'doctrine' => array( + 'doctrine_transaction' => array( 'enabled' => false, - 'entity_manager' => 'default', + 'entity_manager_name' => 'default', ), ), ); diff --git a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php index 07c7838c76323..dbdc1e97281f9 100644 --- a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php +++ b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php @@ -22,20 +22,9 @@ */ class WrapsMessageHandlingInTransaction implements MiddlewareInterface { - /** - * @var ManagerRegistry - */ private $managerRegistry; - - /** - * @var string - */ private $entityManagerName; - /** - * @param ManagerRegistry $managerRegistry - * @param string $entityManagerName - */ public function __construct(ManagerRegistry $managerRegistry, string $entityManagerName) { $this->managerRegistry = $managerRegistry; @@ -44,9 +33,12 @@ public function __construct(ManagerRegistry $managerRegistry, string $entityMana public function handle($message, callable $next) { - /** @var $entityManager EntityManagerInterface */ $entityManager = $this->managerRegistry->getManager($this->entityManagerName); + if (!$entityManager instanceof EntityManagerInterface) { + throw new \InvalidArgumentException(sprintf('The ObjectManager with name "%s" must be an instance of EntityManagerInterface', $this->entityManagerName)); + } + $result = null; try { $entityManager->transactional( From 8b87f2bca15f35417b7c7b66516af301296560a6 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 11:25:54 +0100 Subject: [PATCH 08/24] Do not use an anonymous function --- .../Middleware/WrapsMessageHandlingInTransaction.php | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php index dbdc1e97281f9..0c7505c302f11 100644 --- a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php +++ b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php @@ -39,15 +39,13 @@ public function handle($message, callable $next) throw new \InvalidArgumentException(sprintf('The ObjectManager with name "%s" must be an instance of EntityManagerInterface', $this->entityManagerName)); } - $result = null; + $entityManager->getConnection()->beginTransaction(); try { - $entityManager->transactional( - function () use ($message, $next, &$result) { - $result = $next($message); - } - ); + $result = $next($message); + $entityManager->flush(); + $entityManager->getConnection()->commit(); } catch (\Throwable $exception) { - $this->managerRegistry->resetManager($this->entityManagerName); + $entityManager->getConnection()->rollBack(); throw $exception; } From a32e6b8217b07c67e9d9327b1ac4431dd339cb5b Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 12:54:31 +0100 Subject: [PATCH 09/24] Added tests --- .../DependencyInjection/FrameworkExtension.php | 4 ++-- .../Fixtures/php/messenger.php | 7 +++++++ .../Fixtures/php/messenger_doctrine.php | 9 +++++++++ .../Fixtures/xml/messenger.xml | 10 ++++++++++ .../Fixtures/xml/messenger_doctrine.xml | 15 +++++++++++++++ .../Fixtures/yml/messenger.yml | 2 ++ .../Fixtures/yml/messenger_doctrine.yml | 4 ++++ .../FrameworkExtensionTest.php | 14 ++++++++++++++ 8 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 0d1bc45b549ac..a83fe7603ff17 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1446,8 +1446,8 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder $container->getDefinition('messenger.sender_locator')->replaceArgument(0, $senderLocatorMapping); $container->getDefinition('messenger.asynchronous.routing.sender_locator')->replaceArgument(1, $messageToSenderIdsMapping); - if ($config['doctrine']['enabled']) { - $container->getDefinition('messenger.middleware.doctrine_transaction')->replaceArgument(1, $config['doctrine']['entity_manager']); + if ($config['doctrine_transaction']['enabled']) { + $container->getDefinition('messenger.middleware.doctrine_transaction')->replaceArgument(1, $config['doctrine_transaction']['entity_manager_name']); } else { $container->removeDefinition('messenger.middleware.doctrine_transaction'); } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php new file mode 100644 index 0000000000000..7d7de2270f04d --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php @@ -0,0 +1,7 @@ +loadFromExtension('framework', array( + 'messenger' => array( + 'enabled' => true, + ), +)); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php new file mode 100644 index 0000000000000..89c8cf0b4d3ca --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php @@ -0,0 +1,9 @@ +loadFromExtension('framework', array( + 'messenger' => array( + 'doctrine_transaction' => array( + 'entity_manager_name' => 'foobar', + ) + ), +)); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml new file mode 100644 index 0000000000000..f422d1c924ebb --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml new file mode 100644 index 0000000000000..302020db57c1e --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml @@ -0,0 +1,15 @@ + + + + + + + foobar + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml new file mode 100644 index 0000000000000..ecc9d158f9799 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml @@ -0,0 +1,2 @@ +framework: + messenger: ~ \ No newline at end of file diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml new file mode 100644 index 0000000000000..936e665c831bd --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml @@ -0,0 +1,4 @@ +framework: + messenger: + doctrine_transaction: + entity_manager_name: 'foobar' \ No newline at end of file diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index d49111c65ced7..904817d9ca716 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -489,6 +489,20 @@ public function testWebLink() $this->assertTrue($container->hasDefinition('web_link.add_link_header_listener')); } + public function testMessenger() + { + $container = $this->createContainerFromFile('messenger'); + $this->assertFalse($container->hasDefinition('messenger.middleware.doctrine_transaction')); + } + + public function testMessengerDoctrine() + { + $container = $this->createContainerFromFile('messenger_doctrine'); + $this->assertTrue($container->hasDefinition('messenger.middleware.doctrine_transaction')); + $def = $container->getDefinition('messenger.middleware.doctrine_transaction'); + $this->assertEquals('foobar', $def->getArgument(1)); + } + public function testTranslator() { $container = $this->createContainerFromFile('full'); From 0261a51f9cc17c71e0820f8807b43f5e047a828f Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 15:48:21 +0100 Subject: [PATCH 10/24] Adding configuration definition --- .../Resources/config/schema/symfony-1.0.xsd | 29 +++++++++++++++++++ .../Fixtures/php/messenger.php | 5 +++- .../Fixtures/xml/messenger.xml | 6 ++++ .../Fixtures/xml/messenger_doctrine.xml | 2 +- .../Fixtures/yml/messenger.yml | 5 +++- 5 files changed, 44 insertions(+), 3 deletions(-) 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 d8ef61bbb456b..e277e6281df8b 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 @@ -30,6 +30,7 @@ + @@ -342,4 +343,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php index 7d7de2270f04d..e8bdf4e66f8c6 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php @@ -2,6 +2,9 @@ $container->loadFromExtension('framework', array( 'messenger' => array( - 'enabled' => true, + 'routing' => [ + 'App\Foo' => 'sender.foo', + 'App\Bar' => 'sender.bar', + ], ), )); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml index f422d1c924ebb..38fc2b3f246ab 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml @@ -6,5 +6,11 @@ http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> + + + sender.foo + sender.bar + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml index 302020db57c1e..7f88ee9ac9494 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml @@ -7,7 +7,7 @@ - + foobar diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml index ecc9d158f9799..18d0849805e4c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml @@ -1,2 +1,5 @@ framework: - messenger: ~ \ No newline at end of file + messenger: + routing: + 'App\Foo': 'sender.foo' + 'App\Bar': 'sender.bar' \ No newline at end of file From f362f50dd1b7a119873d292be0c8bca7a7ec66ba Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 15:49:50 +0100 Subject: [PATCH 11/24] cs --- .../Tests/DependencyInjection/Fixtures/php/messenger.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php index e8bdf4e66f8c6..97ef5b674ef61 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php @@ -2,9 +2,9 @@ $container->loadFromExtension('framework', array( 'messenger' => array( - 'routing' => [ + 'routing' => array( 'App\Foo' => 'sender.foo', 'App\Bar' => 'sender.bar', - ], + ), ), )); From a62962027d71f37d7f93d903e70c23781b9f2f91 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 23 Mar 2018 15:50:46 +0100 Subject: [PATCH 12/24] cs --- .../DependencyInjection/Fixtures/php/messenger_doctrine.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php index 89c8cf0b4d3ca..0ebc05e75f19d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php @@ -4,6 +4,6 @@ 'messenger' => array( 'doctrine_transaction' => array( 'entity_manager_name' => 'foobar', - ) + ), ), )); From 05ac7cfeff772bf452154152715ecea7eb2cb399 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 26 Mar 2018 12:43:22 +0200 Subject: [PATCH 13/24] Allow null --- .../FrameworkBundle/DependencyInjection/Configuration.php | 2 +- .../Messenger/Middleware/WrapsMessageHandlingInTransaction.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index e24712133dea7..d5d78a5713da3 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -987,7 +987,7 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode) ->arrayNode('doctrine_transaction') ->canBeEnabled() ->children() - ->scalarNode('entity_manager_name')->info('The name of the entity manager to use')->defaultValue('default')->end() + ->scalarNode('entity_manager_name')->info('The name of the entity manager to use')->defaultNull()->end() ->end() ->end() ->end() diff --git a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php index 0c7505c302f11..58ed9f2974419 100644 --- a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php +++ b/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php @@ -25,7 +25,7 @@ class WrapsMessageHandlingInTransaction implements MiddlewareInterface private $managerRegistry; private $entityManagerName; - public function __construct(ManagerRegistry $managerRegistry, string $entityManagerName) + public function __construct(ManagerRegistry $managerRegistry, ?string $entityManagerName) { $this->managerRegistry = $managerRegistry; $this->entityManagerName = $entityManagerName; From 0e0ab07e19351377a8bd90e34e0e0d6cb6642f7f Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 26 Mar 2018 12:47:03 +0200 Subject: [PATCH 14/24] Moved to DoctrineBridge --- .../Doctrine/Messenger/DoctrineTransactionMiddleware.php} | 4 ++-- .../Bundle/FrameworkBundle/Resources/config/messenger.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/Symfony/{Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php => Bridge/Doctrine/Messenger/DoctrineTransactionMiddleware.php} (92%) diff --git a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php b/src/Symfony/Bridge/Doctrine/Messenger/DoctrineTransactionMiddleware.php similarity index 92% rename from src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php rename to src/Symfony/Bridge/Doctrine/Messenger/DoctrineTransactionMiddleware.php index 58ed9f2974419..bf828224435f6 100644 --- a/src/Symfony/Component/Messenger/Middleware/WrapsMessageHandlingInTransaction.php +++ b/src/Symfony/Bridge/Doctrine/Messenger/DoctrineTransactionMiddleware.php @@ -9,7 +9,7 @@ * file that was distributed with this source code. */ -namespace Symfony\Component\Messenger\Middleware; +namespace Symfony\Bridge\Doctrine\Messenger; use Doctrine\Common\Persistence\ManagerRegistry; use Doctrine\ORM\EntityManagerInterface; @@ -20,7 +20,7 @@ * * @author Tobias Nyholm */ -class WrapsMessageHandlingInTransaction implements MiddlewareInterface +class DoctrineTransactionMiddleware implements MiddlewareInterface { private $managerRegistry; private $entityManagerName; diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml index efe8ea337c4df..cbba149b2fb1f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml @@ -25,7 +25,7 @@ - + From af65748965856ad0e1f673f2c325164c72adb305 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 26 Mar 2018 12:49:42 +0200 Subject: [PATCH 15/24] Added extra check --- .../DependencyInjection/FrameworkExtension.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index a83fe7603ff17..9b3774024773b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -13,6 +13,7 @@ use Doctrine\Common\Annotations\Reader; use Doctrine\Common\Annotations\AnnotationRegistry; +use Symfony\Bridge\Doctrine\Messenger\DoctrineTransactionMiddleware; use Symfony\Bridge\Monolog\Processor\DebugProcessor; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\Controller; @@ -1447,6 +1448,9 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder $container->getDefinition('messenger.asynchronous.routing.sender_locator')->replaceArgument(1, $messageToSenderIdsMapping); if ($config['doctrine_transaction']['enabled']) { + if (!class_exists(DoctrineTransactionMiddleware::class)) { + throw new LogicException('You must install symfony/doctrine-bridge to use the "DoctrineTransactionMiddleware"'); + } $container->getDefinition('messenger.middleware.doctrine_transaction')->replaceArgument(1, $config['doctrine_transaction']['entity_manager_name']); } else { $container->removeDefinition('messenger.middleware.doctrine_transaction'); From 701c6659456599334343cfca1b2d41318e1c92ff Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 26 Mar 2018 22:04:28 +0200 Subject: [PATCH 16/24] Updating configuration --- .../DependencyInjection/Configuration.php | 16 ++++++++++++++++ .../Resources/config/schema/symfony-1.0.xsd | 19 ++++++++----------- .../DependencyInjection/ConfigurationTest.php | 2 +- .../Fixtures/php/messenger.php | 2 +- .../Fixtures/xml/messenger.xml | 9 ++++++--- .../Fixtures/yml/messenger.yml | 2 +- 6 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index d5d78a5713da3..94475bf2f7f04 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -969,6 +969,22 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode) ->children() ->arrayNode('routing') ->useAttributeAsKey('message_class') + ->beforeNormalization() + ->always() + ->then(function ($config) { + $newConfig = []; + foreach ($config as $k => $v) { + if (!is_int($k)) { + return $config; + } + $newConfig[$v['message-class']] = array_map(function($a) { + return is_string($a) ? $a : $a['service']; + }, array_values($v['sender'])); + } + + return $newConfig; + }) + ->end() ->prototype('array') ->beforeNormalization() ->ifString() 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 e277e6281df8b..3aed2b20e4d3e 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 @@ -345,24 +345,21 @@ - - + + - + - - - + + + + - - - - - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index d5d6cdb69ccd1..373c561164bcb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -255,7 +255,7 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor 'routing' => array(), 'doctrine_transaction' => array( 'enabled' => false, - 'entity_manager_name' => 'default', + 'entity_manager_name' => null, ), ), ); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php index 97ef5b674ef61..82e47b642efa4 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php @@ -3,8 +3,8 @@ $container->loadFromExtension('framework', array( 'messenger' => array( 'routing' => array( + 'App\Bar' => ['sender.bar', 'sender.biz'], 'App\Foo' => 'sender.foo', - 'App\Bar' => 'sender.bar', ), ), )); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml index 38fc2b3f246ab..28600ff9dd29a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml @@ -7,9 +7,12 @@ - - sender.foo - sender.bar + + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml index 18d0849805e4c..4f921514c4ec7 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml @@ -1,5 +1,5 @@ framework: messenger: routing: + 'App\Bar': ['sender.bar', 'sender.biz'] 'App\Foo': 'sender.foo' - 'App\Bar': 'sender.bar' \ No newline at end of file From b336d04d30f34780f8b654734c75143d07b026e0 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 26 Mar 2018 22:14:50 +0200 Subject: [PATCH 17/24] Fixed tests --- .../DependencyInjection/Configuration.php | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 94475bf2f7f04..68af707f844fb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -975,23 +975,21 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode) $newConfig = []; foreach ($config as $k => $v) { if (!is_int($k)) { - return $config; + $newConfig[$k] = array('senders'=>is_array($v) ? array_values($v) : array($v)); + } else { + $newConfig[$v['message-class']]['senders'] = array_map( + function ($a) { + return is_string($a) ? $a : $a['service']; + }, + array_values($v['sender']) + ); } - $newConfig[$v['message-class']] = array_map(function($a) { - return is_string($a) ? $a : $a['service']; - }, array_values($v['sender'])); } return $newConfig; }) ->end() ->prototype('array') - ->beforeNormalization() - ->ifString() - ->then(function ($v) { - return array('senders' => array($v)); - }) - ->end() ->children() ->arrayNode('senders') ->requiresAtLeastOneElement() From 7d84394fa828293ddf2ba85a0bade9c8a31f6217 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 26 Mar 2018 22:18:44 +0200 Subject: [PATCH 18/24] cs --- .../FrameworkBundle/DependencyInjection/Configuration.php | 4 ++-- .../Tests/DependencyInjection/Fixtures/php/messenger.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 68af707f844fb..2270c27156003 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -972,10 +972,10 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode) ->beforeNormalization() ->always() ->then(function ($config) { - $newConfig = []; + $newConfig = array(); foreach ($config as $k => $v) { if (!is_int($k)) { - $newConfig[$k] = array('senders'=>is_array($v) ? array_values($v) : array($v)); + $newConfig[$k] = array('senders' => is_array($v) ? array_values($v) : array($v)); } else { $newConfig[$v['message-class']]['senders'] = array_map( function ($a) { diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php index 82e47b642efa4..03cf020f041dd 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php @@ -3,7 +3,7 @@ $container->loadFromExtension('framework', array( 'messenger' => array( 'routing' => array( - 'App\Bar' => ['sender.bar', 'sender.biz'], + 'App\Bar' => array('sender.bar', 'sender.biz'), 'App\Foo' => 'sender.foo', ), ), From 09e5daf988decda2f70e3bb07962d67942671b80 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 27 Mar 2018 09:44:34 +0200 Subject: [PATCH 19/24] cs and minors --- .../DependencyInjection/FrameworkExtension.php | 2 +- .../FrameworkBundle/Resources/config/schema/symfony-1.0.xsd | 4 +--- .../Tests/DependencyInjection/Fixtures/xml/messenger.xml | 6 +++--- .../DependencyInjection/Fixtures/xml/messenger_doctrine.xml | 4 +--- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 9b3774024773b..f03074b646402 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1449,7 +1449,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder if ($config['doctrine_transaction']['enabled']) { if (!class_exists(DoctrineTransactionMiddleware::class)) { - throw new LogicException('You must install symfony/doctrine-bridge to use the "DoctrineTransactionMiddleware"'); + throw new LogicException('The Doctrine transaction middleware is only available when the doctrine bridge is installed. Try running "composer require symfony/doctrine-bridge".'); } $container->getDefinition('messenger.middleware.doctrine_transaction')->replaceArgument(1, $config['doctrine_transaction']['entity_manager_name']); } else { 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 3aed2b20e4d3e..e15bac4c50e83 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 @@ -363,9 +363,7 @@ - - - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml index 28600ff9dd29a..1ecdc09bfbf10 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml @@ -8,11 +8,11 @@ - - + + - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml index 7f88ee9ac9494..a17aab5d39650 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml @@ -7,9 +7,7 @@ - - foobar - + From dcb07caf65d6728403087444f8a428c766cab10c Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 27 Mar 2018 09:47:11 +0200 Subject: [PATCH 20/24] Fixed tests --- .../Tests/DependencyInjection/FrameworkExtensionTest.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index 904817d9ca716..d130db0eec4ec 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -12,6 +12,7 @@ namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection; use Doctrine\Common\Annotations\Annotation; +use Symfony\Bridge\Doctrine\ContainerAwareEventManager; use Symfony\Bundle\FullStack; use Symfony\Bundle\FrameworkBundle\Tests\TestCase; use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddAnnotationsCachedReaderPass; @@ -497,6 +498,10 @@ public function testMessenger() public function testMessengerDoctrine() { + if (!class_exists(ContainerAwareEventManager::class)) { + self::markTestSkipped('Skipping tests since Doctrine bridge is not installed'); + } + $container = $this->createContainerFromFile('messenger_doctrine'); $this->assertTrue($container->hasDefinition('messenger.middleware.doctrine_transaction')); $def = $container->getDefinition('messenger.middleware.doctrine_transaction'); From 1603708f559ad338d289ab9d4eef8384d0b9905c Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 27 Mar 2018 09:54:28 +0200 Subject: [PATCH 21/24] Fixed EOL --- .../DependencyInjection/Fixtures/yml/messenger_doctrine.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml index 936e665c831bd..52c8beb942fff 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml @@ -1,4 +1,4 @@ framework: messenger: doctrine_transaction: - entity_manager_name: 'foobar' \ No newline at end of file + entity_manager_name: 'foobar' From 399f7c5f37c0dad4d65d8e0b3a20072fcb0e4ab2 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 27 Mar 2018 11:21:18 +0200 Subject: [PATCH 22/24] Added config key "middlewares" --- .../DependencyInjection/Configuration.php | 18 +++++++++++++++--- .../DependencyInjection/FrameworkExtension.php | 4 ++-- .../Resources/config/schema/symfony-1.0.xsd | 8 +++++++- .../Fixtures/php/messenger_doctrine.php | 6 ++++-- .../Fixtures/xml/messenger_doctrine.xml | 4 +++- .../Fixtures/yml/messenger_doctrine.yml | 5 +++-- 6 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 2270c27156003..a156bce8cdfe5 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -966,6 +966,15 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode) ->arrayNode('messenger') ->info('Messenger configuration') ->{!class_exists(FullStack::class) && class_exists(MessageBusInterface::class) ? 'canBeDisabled' : 'canBeEnabled'}() + ->beforeNormalization() + ->ifTrue(function($config) { + return empty($config['middlewares']); + }) + ->then(function($config) { + $config['middlewares'] = array(); + return $config; + }) + ->end() ->children() ->arrayNode('routing') ->useAttributeAsKey('message_class') @@ -998,10 +1007,13 @@ function ($a) { ->end() ->end() ->end() - ->arrayNode('doctrine_transaction') - ->canBeEnabled() + ->arrayNode('middlewares') ->children() - ->scalarNode('entity_manager_name')->info('The name of the entity manager to use')->defaultNull()->end() + ->arrayNode('doctrine_transaction') + ->canBeEnabled() + ->children() + ->scalarNode('entity_manager_name')->info('The name of the entity manager to use')->defaultNull()->end() + ->end() ->end() ->end() ->end() diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index f03074b646402..8d6ddd7976fcd 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1447,11 +1447,11 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder $container->getDefinition('messenger.sender_locator')->replaceArgument(0, $senderLocatorMapping); $container->getDefinition('messenger.asynchronous.routing.sender_locator')->replaceArgument(1, $messageToSenderIdsMapping); - if ($config['doctrine_transaction']['enabled']) { + if ($config['middlewares']['doctrine_transaction']['enabled']) { if (!class_exists(DoctrineTransactionMiddleware::class)) { throw new LogicException('The Doctrine transaction middleware is only available when the doctrine bridge is installed. Try running "composer require symfony/doctrine-bridge".'); } - $container->getDefinition('messenger.middleware.doctrine_transaction')->replaceArgument(1, $config['doctrine_transaction']['entity_manager_name']); + $container->getDefinition('messenger.middleware.doctrine_transaction')->replaceArgument(1, $config['middlewares']['doctrine_transaction']['entity_manager_name']); } else { $container->removeDefinition('messenger.middleware.doctrine_transaction'); } 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 e15bac4c50e83..b3f4d27f4720a 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 @@ -347,7 +347,7 @@ - + @@ -362,6 +362,12 @@ + + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php index 0ebc05e75f19d..1295236717aef 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_doctrine.php @@ -2,8 +2,10 @@ $container->loadFromExtension('framework', array( 'messenger' => array( - 'doctrine_transaction' => array( - 'entity_manager_name' => 'foobar', + 'middlewares' => array( + 'doctrine_transaction' => array( + 'entity_manager_name' => 'foobar', + ), ), ), )); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml index a17aab5d39650..8d9d8850f5c4c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_doctrine.xml @@ -7,7 +7,9 @@ - + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml index 52c8beb942fff..346fae558bd24 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_doctrine.yml @@ -1,4 +1,5 @@ framework: messenger: - doctrine_transaction: - entity_manager_name: 'foobar' + middlewares: + doctrine_transaction: + entity_manager_name: 'foobar' From 5a6b8de3f5fff34672f9e69a1c42c3d6c4f0dba4 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 27 Mar 2018 11:23:31 +0200 Subject: [PATCH 23/24] cs --- .../FrameworkBundle/DependencyInjection/Configuration.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index a156bce8cdfe5..ede705c9279a9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -967,11 +967,12 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode) ->info('Messenger configuration') ->{!class_exists(FullStack::class) && class_exists(MessageBusInterface::class) ? 'canBeDisabled' : 'canBeEnabled'}() ->beforeNormalization() - ->ifTrue(function($config) { + ->ifTrue(function ($config) { return empty($config['middlewares']); }) - ->then(function($config) { + ->then(function ($config) { $config['middlewares'] = array(); + return $config; }) ->end() From 68131f43bc806c93cca6617d78d6f311539cc5d6 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Tue, 27 Mar 2018 11:29:33 +0200 Subject: [PATCH 24/24] Use `addDefaultsIfNotSet()` --- .../DependencyInjection/Configuration.php | 11 +---------- .../Tests/DependencyInjection/ConfigurationTest.php | 8 +++++--- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index ede705c9279a9..a835b11428b6a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -966,16 +966,6 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode) ->arrayNode('messenger') ->info('Messenger configuration') ->{!class_exists(FullStack::class) && class_exists(MessageBusInterface::class) ? 'canBeDisabled' : 'canBeEnabled'}() - ->beforeNormalization() - ->ifTrue(function ($config) { - return empty($config['middlewares']); - }) - ->then(function ($config) { - $config['middlewares'] = array(); - - return $config; - }) - ->end() ->children() ->arrayNode('routing') ->useAttributeAsKey('message_class') @@ -1009,6 +999,7 @@ function ($a) { ->end() ->end() ->arrayNode('middlewares') + ->addDefaultsIfNotSet() ->children() ->arrayNode('doctrine_transaction') ->canBeEnabled() diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index 373c561164bcb..6fc0ebd1cf8c2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -253,9 +253,11 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor 'messenger' => array( 'enabled' => !class_exists(FullStack::class) && class_exists(MessageBusInterface::class), 'routing' => array(), - 'doctrine_transaction' => array( - 'enabled' => false, - 'entity_manager_name' => null, + 'middlewares' => array( + 'doctrine_transaction' => array( + 'enabled' => false, + 'entity_manager_name' => null, + ), ), ), );