From 7fdf0b08bf213ba8ab32d436593592a7e95f4dbd Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Fri, 22 Sep 2017 13:20:42 +0200 Subject: [PATCH] Exclude embedded documents from proxy generation --- CacheWarmer/ProxyCacheWarmer.php | 16 +++++++++++++++- Tests/CacheWarmer/ProxyCacheWarmerTest.php | 8 ++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CacheWarmer/ProxyCacheWarmer.php b/CacheWarmer/ProxyCacheWarmer.php index 3c57ad63..63ba21c3 100644 --- a/CacheWarmer/ProxyCacheWarmer.php +++ b/CacheWarmer/ProxyCacheWarmer.php @@ -15,6 +15,8 @@ namespace Doctrine\Bundle\MongoDBBundle\CacheWarmer; use Doctrine\Common\Proxy\AbstractProxyFactory; +use Doctrine\ODM\MongoDB\DocumentManager; +use Doctrine\ODM\MongoDB\Mapping\ClassMetadata; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface; @@ -72,8 +74,20 @@ public function warmUp($cacheDir) $registry = $this->container->get('doctrine_mongodb'); foreach ($registry->getManagers() as $dm) { /* @var $dm \Doctrine\ODM\MongoDB\DocumentManager */ - $classes = $dm->getMetadataFactory()->getAllMetadata(); + $classes = $this->getClassesForProxyGeneration($dm); $dm->getProxyFactory()->generateProxyClasses($classes); } } + + /** + * @param DocumentManager $dm + * + * @return ClassMetadata[] + */ + private function getClassesForProxyGeneration(DocumentManager $dm) + { + return array_filter($dm->getMetadataFactory()->getAllMetadata(), function (ClassMetadata $metadata) { + return !$metadata->isEmbeddedDocument && !$metadata->isMappedSuperclass; + }); + } } diff --git a/Tests/CacheWarmer/ProxyCacheWarmerTest.php b/Tests/CacheWarmer/ProxyCacheWarmerTest.php index 8807768c..c831a888 100644 --- a/Tests/CacheWarmer/ProxyCacheWarmerTest.php +++ b/Tests/CacheWarmer/ProxyCacheWarmerTest.php @@ -60,7 +60,11 @@ public function testWarmerNotOptional() public function testWarmerExecuted() { - $this->proxyMock->expects($this->once())->method('generateProxyClasses'); + $this->proxyMock + ->expects($this->once()) + ->method('generateProxyClasses') + ->with($this->countOf(1)) + ; $this->warmer->warmUp('meh'); } @@ -82,4 +86,4 @@ public function provideWarmerNotExecuted() [ Configuration::AUTOGENERATE_FILE_NOT_EXISTS ], ]; } -} \ No newline at end of file +}