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

This commit is contained in:
Benjamin Eberlei 2011-01-26 00:45:52 +01:00 committed by Fabien Potencier
parent 5700be7ac4
commit 3eadf73cbd
2 changed files with 39 additions and 2 deletions

View File

@ -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));

View File

@ -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');