Skip to content

Commit 33b8533

Browse files
committed
Disable proxy class generation when using Native Lazy Objects
1 parent de79766 commit 33b8533

File tree

4 files changed

+26
-8
lines changed

4 files changed

+26
-8
lines changed

src/DependencyInjection/DoctrineMongoDBExtension.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,12 @@ public function load(array $configs, ContainerBuilder $container): void
474474
$configuratorDefinition->addMethodCall('loadTypes', [$config['types']]);
475475
}
476476

477+
// Disable proxy class generation for PHP 8.4 native lazy objects
478+
if ($config['enable_native_lazy_objects']) {
479+
$config['auto_generate_proxy_classes'] = ODMConfiguration::AUTOGENERATE_NEVER;
480+
$container->removeDefinition('doctrine_mongodb.odm.proxy_cache_warmer');
481+
}
482+
477483
// set some options as parameters and unset them
478484
$config = $this->overrideParameters($config, $container);
479485

@@ -487,7 +493,7 @@ public function load(array $configs, ContainerBuilder $container): void
487493
}
488494

489495
$container->getDefinition('doctrine_mongodb')
490-
->setArgument(5, $config['enable_lazy_ghost_objects'] ? LazyLoadingInterface::class : Proxy::class);
496+
->setArgument(5, $config['enable_lazy_ghost_objects'] ? Proxy::class : LazyLoadingInterface::class);
491497

492498
// load the connections
493499
$this->loadConnections($config['connections'], $container, $config);

src/DoctrineMongoDBBundle.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ public function boot(): void
7777
private function registerAutoloader(DocumentManager $documentManager): void
7878
{
7979
$configuration = $documentManager->getConfiguration();
80+
if ($configuration->isNativeLazyObjectEnabled() || $configuration->isLazyGhostObjectEnabled()) {
81+
return;
82+
}
83+
8084
if ($configuration->getAutoGenerateProxyClasses() !== Configuration::AUTOGENERATE_FILE_NOT_EXISTS) {
8185
return;
8286
}

tests/DependencyInjection/ConfigurationTest.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010
use Doctrine\Bundle\MongoDBBundle\Tests\Fixtures\Filter\DisabledFilter;
1111
use Doctrine\Bundle\MongoDBBundle\Tests\Fixtures\Repository\CustomGridFSRepository;
1212
use Doctrine\Bundle\MongoDBBundle\Tests\Fixtures\Repository\CustomRepository;
13+
use Doctrine\Bundle\MongoDBBundle\Tests\TestCase;
1314
use Doctrine\ODM\MongoDB\Configuration as ODMConfiguration;
1415
use Doctrine\ODM\MongoDB\Repository\DefaultGridFSRepository;
1516
use Doctrine\ODM\MongoDB\Repository\DocumentRepository;
1617
use Generator;
1718
use PHPUnit\Framework\Attributes\DataProvider;
1819
use PHPUnit\Framework\Attributes\Group;
19-
use PHPUnit\Framework\TestCase;
2020
use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
2121
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
2222
use Symfony\Component\Config\Definition\Processor;
@@ -28,8 +28,6 @@
2828
use function file_get_contents;
2929
use function method_exists;
3030

31-
use const PHP_VERSION_ID;
32-
3331
class ConfigurationTest extends TestCase
3432
{
3533
use ExpectDeprecationTrait;
@@ -45,7 +43,7 @@ public function testDefaults(): void
4543
'auto_generate_proxy_classes' => ODMConfiguration::AUTOGENERATE_EVAL,
4644
'auto_generate_persistent_collection_classes' => ODMConfiguration::AUTOGENERATE_NEVER,
4745
'enable_lazy_ghost_objects' => method_exists(ODMConfiguration::class, 'setUseLazyGhostObject'),
48-
'enable_native_lazy_objects' => PHP_VERSION_ID >= 80400 && method_exists(ODMConfiguration::class, 'setUseNativeLazyObject'),
46+
'enable_native_lazy_objects' => self::useNativeLazyObject(),
4947
'default_database' => 'default',
5048
'document_managers' => [],
5149
'connections' => [],

tests/TestCase.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,24 @@ public static function createTestDocumentManager(array $paths = []): DocumentMan
3232
$config->setMetadataDriverImpl(new AttributeDriver($paths));
3333
$config->setMetadataCache(new ArrayAdapter());
3434

35-
if (PHP_VERSION_ID >= 80400 && method_exists($config, 'setUseLazyGhostObject')) {
35+
if (self::useNativeLazyObject()) {
36+
$config->setUseNativeLazyObject(true);
37+
} elseif (self::useLazyGhostObject()) {
3638
$config->setUseLazyGhostObject(true);
37-
} elseif (method_exists($config, 'setUseLazyGhostObject')) {
38-
$config->setUseLazyGhostObject(false);
3939
}
4040

4141
$uri = getenv('MONGODB_URI') ?: throw new RuntimeException('The MONGODB_URI environment variable is not set.');
4242

4343
return DocumentManager::create(new Client($uri), $config);
4444
}
45+
46+
public static function useNativeLazyObject(): bool
47+
{
48+
return PHP_VERSION_ID >= 80400 && method_exists(Configuration::class, 'setUseNativeLazyObject');
49+
}
50+
51+
public static function useLazyGhostObject(): bool
52+
{
53+
return method_exists(Configuration::class, 'setUseLazyGhostObject') && ! self::useNativeLazyObject();
54+
}
4555
}

0 commit comments

Comments
 (0)