Skip to content

Commit 9fe5ce5

Browse files
Merge branch '6.4' into 7.2
* 6.4: [DoctrineBridge] Fix support for entities that leverage native lazy objects
2 parents 8d9c8a5 + cf5dcea commit 9fe5ce5

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

Diff for: Security/User/EntityUserProvider.php

+2
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public function refreshUser(UserInterface $user): UserInterface
100100

101101
if ($refreshedUser instanceof Proxy && !$refreshedUser->__isInitialized()) {
102102
$refreshedUser->__load();
103+
} elseif (\PHP_VERSION_ID >= 80400 && ($r = new \ReflectionClass($refreshedUser))->isUninitializedLazyObject($refreshedUser)) {
104+
$r->initializeLazyObject($refreshedUser);
103105
}
104106

105107
return $refreshedUser;

Diff for: Tests/DoctrineTestHelper.php

+4
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ public static function createTestEntityManager(?Configuration $config = null): E
4747
$config ??= self::createTestConfiguration();
4848
$eventManager = new EventManager();
4949

50+
if (\PHP_VERSION_ID >= 80400 && method_exists($config, 'enableNativeLazyObjects')) {
51+
$config->enableNativeLazyObjects(true);
52+
}
53+
5054
return new EntityManager(DriverManager::getConnection($params, $config, $eventManager), $config, $eventManager);
5155
}
5256

Diff for: Tests/Security/User/EntityUserProviderTest.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Bridge\Doctrine\Tests\Security\User;
1313

14+
use Doctrine\ORM\Configuration;
1415
use Doctrine\ORM\EntityManager;
1516
use Doctrine\ORM\EntityRepository;
1617
use Doctrine\ORM\Tools\SchemaTool;
@@ -219,8 +220,13 @@ public function testRefreshedUserProxyIsLoaded()
219220
$provider = new EntityUserProvider($this->getManager($em), User::class);
220221
$refreshedUser = $provider->refreshUser($user);
221222

222-
$this->assertInstanceOf(Proxy::class, $refreshedUser);
223-
$this->assertTrue($refreshedUser->__isInitialized());
223+
if (\PHP_VERSION_ID >= 80400 && method_exists(Configuration::class, 'enableNativeLazyObjects')) {
224+
$this->assertFalse((new \ReflectionClass(User::class))->isUninitializedLazyObject($refreshedUser));
225+
$this->assertSame('user1', $refreshedUser->name);
226+
} else {
227+
$this->assertInstanceOf(Proxy::class, $refreshedUser);
228+
$this->assertTrue($refreshedUser->__isInitialized());
229+
}
224230
}
225231

226232
private function getManager($em, $name = null)

0 commit comments

Comments
 (0)