From 767585f933c57a99b3c67afbb4f6dd246dba47ba Mon Sep 17 00:00:00 2001 From: Mathieu Lechat Date: Mon, 30 Oct 2017 15:50:11 +0100 Subject: [PATCH 1/7] fix Symfony 4 BC breaks --- DataCollector/StandardDataCollector.php | 8 ++++++++ DependencyInjection/DoctrineMongoDBExtension.php | 1 + ManagerRegistry.php | 8 ++++++++ Resources/config/mongodb.xml | 6 ++---- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/DataCollector/StandardDataCollector.php b/DataCollector/StandardDataCollector.php index 2f5dde22..bf315e34 100644 --- a/DataCollector/StandardDataCollector.php +++ b/DataCollector/StandardDataCollector.php @@ -44,6 +44,14 @@ public function collect(Request $request, Response $response, \Exception $except $this->data['queries'] = array_map('json_encode', $this->queries); } + public function reset() + { + $this->data = [ + 'nb_queries' => 0, + 'queries' => [], + ]; + } + public function getQueryCount() { return $this->data['nb_queries']; diff --git a/DependencyInjection/DoctrineMongoDBExtension.php b/DependencyInjection/DoctrineMongoDBExtension.php index c9005abc..05c52f49 100644 --- a/DependencyInjection/DoctrineMongoDBExtension.php +++ b/DependencyInjection/DoctrineMongoDBExtension.php @@ -259,6 +259,7 @@ protected function loadDocumentManager(array $documentManager, $defaultDM, $defa $odmDmDef = new Definition('%doctrine_mongodb.odm.document_manager.class%', $odmDmArgs); $odmDmDef->setFactory(['%doctrine_mongodb.odm.document_manager.class%', 'create']); $odmDmDef->addTag('doctrine_mongodb.odm.document_manager'); + $odmDmDef->setPublic(true); $container ->setDefinition(sprintf('doctrine_mongodb.odm.%s_document_manager', $documentManager['name']), $odmDmDef) diff --git a/ManagerRegistry.php b/ManagerRegistry.php index a0061dba..1ba57d8a 100644 --- a/ManagerRegistry.php +++ b/ManagerRegistry.php @@ -15,10 +15,18 @@ namespace Doctrine\Bundle\MongoDBBundle; use Doctrine\ODM\MongoDB\MongoDBException; +use Psr\Container\ContainerInterface; use Symfony\Bridge\Doctrine\ManagerRegistry as BaseManagerRegistry; class ManagerRegistry extends BaseManagerRegistry { + public function __construct(ContainerInterface $container, $name, array $connections, array $managers, $defaultConnection, $defaultManager, $proxyInterfaceName) + { + parent::__construct($name, $connections, $managers, $defaultConnection, $defaultManager, $proxyInterfaceName); + + $this->container = $container; + } + /** * Resolves a registered namespace alias to the full namespace. * diff --git a/Resources/config/mongodb.xml b/Resources/config/mongodb.xml index a082bca0..74f2d61f 100644 --- a/Resources/config/mongodb.xml +++ b/Resources/config/mongodb.xml @@ -180,16 +180,14 @@ - + + MongoDB %doctrine_mongodb.odm.connections% %doctrine_mongodb.odm.document_managers% %doctrine_mongodb.odm.default_connection% %doctrine_mongodb.odm.default_document_manager% Doctrine\ODM\MongoDB\Proxy\Proxy - - - From da8fa356b8399f296c2e2183b2a554a911678822 Mon Sep 17 00:00:00 2001 From: Mathieu Lechat Date: Mon, 30 Oct 2017 17:34:45 +0100 Subject: [PATCH 2/7] Make connection services public --- DependencyInjection/DoctrineMongoDBExtension.php | 1 + 1 file changed, 1 insertion(+) diff --git a/DependencyInjection/DoctrineMongoDBExtension.php b/DependencyInjection/DoctrineMongoDBExtension.php index 05c52f49..5a636392 100644 --- a/DependencyInjection/DoctrineMongoDBExtension.php +++ b/DependencyInjection/DoctrineMongoDBExtension.php @@ -303,6 +303,7 @@ protected function loadConnections(array $connections, ContainerBuilder $contain $this->normalizeDriverOptions($connection), ]; $odmConnDef = new Definition('%doctrine_mongodb.odm.connection.class%', $odmConnArgs); + $odmConnDef->setPublic(true); $id = sprintf('doctrine_mongodb.odm.%s_connection', $name); $container->setDefinition($id, $odmConnDef); $cons[$name] = $id; From 14e685efec2970dfaffdf46b47290a8962aa28f1 Mon Sep 17 00:00:00 2001 From: Mathieu Lechat Date: Mon, 30 Oct 2017 17:34:59 +0100 Subject: [PATCH 3/7] remove BC break --- ManagerRegistry.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/ManagerRegistry.php b/ManagerRegistry.php index 1ba57d8a..12bf58c7 100644 --- a/ManagerRegistry.php +++ b/ManagerRegistry.php @@ -15,16 +15,24 @@ namespace Doctrine\Bundle\MongoDBBundle; use Doctrine\ODM\MongoDB\MongoDBException; -use Psr\Container\ContainerInterface; use Symfony\Bridge\Doctrine\ManagerRegistry as BaseManagerRegistry; +use Symfony\Component\DependencyInjection\ContainerAwareTrait; +use Symfony\Component\DependencyInjection\ContainerInterface; class ManagerRegistry extends BaseManagerRegistry { public function __construct(ContainerInterface $container, $name, array $connections, array $managers, $defaultConnection, $defaultManager, $proxyInterfaceName) { - parent::__construct($name, $connections, $managers, $defaultConnection, $defaultManager, $proxyInterfaceName); + $parentTraits = class_uses(parent::class); + if (isset($parentTraits[ContainerAwareTrait::class])) { + // this case should be removed when Symfony 3.4 becomes the lowest supported version + // and then also, the constructor should type-hint Psr\Container\ContainerInterface + $this->setContainer($container); + } else { + $this->container = $container; + } - $this->container = $container; + parent::__construct($name, $connections, $managers, $defaultConnection, $defaultManager, $proxyInterfaceName); } /** From 347133489d435d8c3018c75eed3fae404f75667e Mon Sep 17 00:00:00 2001 From: Mathieu Lechat Date: Mon, 30 Oct 2017 17:35:11 +0100 Subject: [PATCH 4/7] reset $this->queries --- DataCollector/StandardDataCollector.php | 1 + 1 file changed, 1 insertion(+) diff --git a/DataCollector/StandardDataCollector.php b/DataCollector/StandardDataCollector.php index bf315e34..cdb867bb 100644 --- a/DataCollector/StandardDataCollector.php +++ b/DataCollector/StandardDataCollector.php @@ -46,6 +46,7 @@ public function collect(Request $request, Response $response, \Exception $except public function reset() { + $this->queries = []; $this->data = [ 'nb_queries' => 0, 'queries' => [], From 61776f2d54bd3a73329ba720dca426bb89833fd4 Mon Sep 17 00:00:00 2001 From: Mathieu Lechat Date: Thu, 2 Nov 2017 09:22:02 +0100 Subject: [PATCH 5/7] add $container without BC break --- ManagerRegistry.php | 2 +- Resources/config/mongodb.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ManagerRegistry.php b/ManagerRegistry.php index 12bf58c7..0ec338be 100644 --- a/ManagerRegistry.php +++ b/ManagerRegistry.php @@ -21,7 +21,7 @@ class ManagerRegistry extends BaseManagerRegistry { - public function __construct(ContainerInterface $container, $name, array $connections, array $managers, $defaultConnection, $defaultManager, $proxyInterfaceName) + public function __construct($name, array $connections, array $managers, $defaultConnection, $defaultManager, $proxyInterfaceName, ContainerInterface $container = null) { $parentTraits = class_uses(parent::class); if (isset($parentTraits[ContainerAwareTrait::class])) { diff --git a/Resources/config/mongodb.xml b/Resources/config/mongodb.xml index 74f2d61f..5b07267d 100644 --- a/Resources/config/mongodb.xml +++ b/Resources/config/mongodb.xml @@ -181,13 +181,13 @@ - MongoDB %doctrine_mongodb.odm.connections% %doctrine_mongodb.odm.document_managers% %doctrine_mongodb.odm.default_connection% %doctrine_mongodb.odm.default_document_manager% Doctrine\ODM\MongoDB\Proxy\Proxy + From 294add951eddbd34ecf82cba36b4a52d77d02382 Mon Sep 17 00:00:00 2001 From: Mathieu Lechat Date: Wed, 15 Nov 2017 09:43:26 +0100 Subject: [PATCH 6/7] Make doctrine_mongodb.odm.document_manager alias public --- DependencyInjection/DoctrineMongoDBExtension.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DependencyInjection/DoctrineMongoDBExtension.php b/DependencyInjection/DoctrineMongoDBExtension.php index 5a636392..f54a3545 100644 --- a/DependencyInjection/DoctrineMongoDBExtension.php +++ b/DependencyInjection/DoctrineMongoDBExtension.php @@ -271,6 +271,8 @@ protected function loadDocumentManager(array $documentManager, $defaultDM, $defa 'doctrine_mongodb.odm.document_manager', new Alias(sprintf('doctrine_mongodb.odm.%s_document_manager', $documentManager['name'])) ); + $container->getAlias('doctrine_mongodb.odm.document_manager')->setPublic(true); + $container->setAlias( 'doctrine_mongodb.odm.event_manager', new Alias(sprintf('doctrine_mongodb.odm.%s_connection.event_manager', $connectionName)) From f749e99f320f0bf016dff78782a414a74abda3ed Mon Sep 17 00:00:00 2001 From: Mathieu Lechat Date: Wed, 15 Nov 2017 09:43:38 +0100 Subject: [PATCH 7/7] Add tests --- Tests/DataCollector/StandardDataCollectorTest.php | 13 +++++++++++++ .../DoctrineMongoDBExtensionTest.php | 10 ++++++++++ 2 files changed, 23 insertions(+) diff --git a/Tests/DataCollector/StandardDataCollectorTest.php b/Tests/DataCollector/StandardDataCollectorTest.php index aaa2bae0..a16e8693 100644 --- a/Tests/DataCollector/StandardDataCollectorTest.php +++ b/Tests/DataCollector/StandardDataCollectorTest.php @@ -30,4 +30,17 @@ public function testCollect() $this->assertEquals(1, $collector->getQueryCount()); $this->assertEquals(['{"foo":"bar"}'], $collector->getQueries()); } + + public function testReset() + { + $collector = new StandardDataCollector(); + $collector->logQuery(['foo' => 'bar']); + $collector->collect(new Request(), new Response()); + + $collector->reset(); + $collector->collect(new Request(), new Response()); + + $this->assertEquals([], $collector->getQueries()); + $this->assertEquals(0, $collector->getQueryCount()); + } } diff --git a/Tests/DependencyInjection/DoctrineMongoDBExtensionTest.php b/Tests/DependencyInjection/DoctrineMongoDBExtensionTest.php index b3c09de3..55f0b2ab 100644 --- a/Tests/DependencyInjection/DoctrineMongoDBExtensionTest.php +++ b/Tests/DependencyInjection/DoctrineMongoDBExtensionTest.php @@ -225,4 +225,14 @@ public function testFactoriesAreRegistered() [new Reference('persistent_collection_factory_service')] ], $configDm1->getMethodCalls()); } + + public function testPublicServicesAndAliases() + { + $loader = new DoctrineMongoDBExtension(); + $loader->load(self::buildConfiguration(), $container = $this->buildMinimalContainer()); + + $this->assertTrue($container->getDefinition('doctrine_mongodb')->isPublic()); + $this->assertTrue($container->getDefinition('doctrine_mongodb.odm.dummy_document_manager')->isPublic()); + $this->assertTrue($container->getAlias('doctrine_mongodb.odm.document_manager')->isPublic()); + } }