瀏覽代碼

[DoctrineBundle] Stop the cache warmer if proxies are auto-generated anyways.

Benjamin Eberlei 14 年之前
父節點
當前提交
3eadf73cbd

+ 6 - 0
src/Symfony/Bundle/DoctrineBundle/CacheWarmer/ProxyCacheWarmer.php

@@ -49,6 +49,7 @@ class ProxyCacheWarmer implements CacheWarmerInterface
 
     public function warmUp($cacheDir)
     {
+        // we need the directory no matter the proxy cache generation strategy.
         $proxyCacheDir = $this->container->getParameter('doctrine.orm.proxy_dir');
         if (!file_exists($proxyCacheDir)) {
             if (false === @mkdir($proxyCacheDir, 0777, true)) {
@@ -58,6 +59,11 @@ class ProxyCacheWarmer implements CacheWarmerInterface
             throw new \RuntimeException(sprintf('Doctrine Proxy directory (%s) is not writeable for the current system user.', $proxyCacheDir));
         }
 
+        // if proxys are autogenerated we don't need to generate them in the cache warmer.
+        if ($this->container->getParameter('doctrine.orm.auto_generate_proxy_classes') === true) {
+            return;
+        }
+
         $entityManagers = $this->container->getParameter('doctrine.orm.entity_managers');
         foreach ($entityManagers AS $entityManagerName) {
             $em = $this->container->get(sprintf('doctrine.orm.%s_entity_manager', $entityManagerName));

+ 33 - 2
src/Symfony/Bundle/DoctrineBundle/Tests/CacheWarmer/ProxyCacheWarmerTest.php

@@ -28,20 +28,25 @@ class ProxyCacheWarmerTest extends \Symfony\Bundle\DoctrineBundle\Tests\TestCase
         $testManager = $this->createTestEntityManager(array(
             __DIR__ . "/../DependencyInjection/Fixtures/Bundles/AnnotationsBundle/Entity")
         );
+
         $container = $this->getMock('Symfony\Component\DependencyInjection\Container');
         $container->expects($this->at(0))
                   ->method('getParameter')
                   ->with($this->equalTo('doctrine.orm.proxy_dir'))
                   ->will($this->returnValue(sys_get_temp_dir()));
         $container->expects($this->at(1))
+                  ->method('getParameter')
+                  ->with($this->equalTo('doctrine.orm.auto_generate_proxy_classes'))
+                  ->will($this->returnValue( false ));
+        $container->expects($this->at(2))
                   ->method('getParameter')
                   ->with($this->equalTo('doctrine.orm.entity_managers'))
                   ->will($this->returnValue(array('default', 'foo')));
-        $container->expects($this->at(2))
+        $container->expects($this->at(3))
                   ->method('get')
                   ->with($this->equalTo('doctrine.orm.default_entity_manager'))
                   ->will($this->returnValue($testManager));
-        $container->expects($this->at(3))
+        $container->expects($this->at(4))
                   ->method('get')
                   ->with($this->equalTo('doctrine.orm.foo_entity_manager'))
                   ->will($this->returnValue($testManager));
@@ -50,6 +55,32 @@ class ProxyCacheWarmerTest extends \Symfony\Bundle\DoctrineBundle\Tests\TestCase
         $cacheWarmer->warmUp(sys_get_temp_dir());
     }
 
+    public function testSkipWhenProxiesAreAutoGenerated()
+    {
+        $testManager = $this->createTestEntityManager(array(
+            __DIR__ . "/../DependencyInjection/Fixtures/Bundles/AnnotationsBundle/Entity")
+        );
+
+        $container = $this->getMock('Symfony\Component\DependencyInjection\Container');
+        $container->expects($this->at(0))
+                  ->method('getParameter')
+                  ->with($this->equalTo('doctrine.orm.proxy_dir'))
+                  ->will($this->returnValue(sys_get_temp_dir()));
+        $container->expects($this->at(1))
+                  ->method('getParameter')
+                  ->with($this->equalTo('doctrine.orm.auto_generate_proxy_classes'))
+                  ->will($this->returnValue( true ));
+        $container->expects($this->at(2))
+                  ->method('getParameter')
+                  ->with($this->equalTo('assertion'))
+                  ->will($this->returnValue( true ));
+
+        $cacheWarmer = new ProxyCacheWarmer($container);
+        $cacheWarmer->warmUp(sys_get_temp_dir());
+
+        $container->getParameter('assertion'); // check that the assertion is really the third call.
+    }
+
     public function testProxyCacheWarmingIsNotOptional()
     {
         $container = $this->getMock('Symfony\Component\DependencyInjection\Container');