Skip to content

Commit 7ca1c52

Browse files
committed
Fix MappingEntities event
1 parent 1bcfa44 commit 7ca1c52

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

src/EventListener/MappingEntities.php

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,45 @@
1616
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
1717
use Doctrine\ORM\Mapping\ClassMetadata;
1818
use Doctrine\ORM\Mapping\ClassMetadataInfo;
19+
use Ecommit\CrudBundle\Entity\UserCrudInterface;
20+
use Ecommit\CrudBundle\Entity\UserCrudSettings;
1921

2022
final class MappingEntities
2123
{
22-
protected bool $isLoad = false;
24+
private bool $isLoad = false;
25+
26+
/** @var array<class-string, bool> */
27+
private array $inProgress = [];
2328

2429
/**
2530
* @psalm-suppress ArgumentTypeCoercion
2631
*/
2732
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs): void
2833
{
34+
if ($this->isLoad) {
35+
return;
36+
}
37+
2938
$metadata = $eventArgs->getClassMetadata();
3039

3140
if ($metadata->isMappedSuperclass) {
3241
return;
3342
}
3443

35-
/** @var string $className */
44+
/** @var class-string $className */
3645
$className = $metadata->getName();
37-
if (!$this->isLoad && is_subclass_of($className, 'Ecommit\CrudBundle\Entity\UserCrudInterface')) {
38-
$this->isLoad = true;
39-
$userCrudSettingsMetadata = $eventArgs->getEntityManager()->getMetadataFactory()->getMetadataFor('Ecommit\CrudBundle\Entity\UserCrudSettings');
46+
47+
if (isset($this->inProgress[$className])) {
48+
return;
49+
}
50+
$this->inProgress[$className] = true;
51+
52+
if (is_subclass_of($className, UserCrudInterface::class)) {
53+
$userCrudSettingsMetadata = $eventArgs->getEntityManager()->getMetadataFactory()->getMetadataFor(UserCrudSettings::class);
4054
$this->mappUserCrudSettings($userCrudSettingsMetadata, $metadata);
4155
}
42-
if (!$this->isLoad && 'Ecommit\CrudBundle\Entity\UserCrudSettings' === $className) {
43-
$this->isLoad = true;
44-
$userMetadata = $eventArgs->getEntityManager()->getMetadataFactory()->getMetadataFor('Ecommit\CrudBundle\Entity\UserCrudInterface');
56+
if (UserCrudSettings::class === $className) {
57+
$userMetadata = $eventArgs->getEntityManager()->getMetadataFactory()->getMetadataFor(UserCrudInterface::class);
4558
$this->mappUserCrudSettings($metadata, $userMetadata);
4659
}
4760
}
@@ -58,5 +71,6 @@ protected function mappUserCrudSettings(ClassMetadataInfo|ClassMetadata $userCru
5871
]],
5972
]
6073
);
74+
$this->isLoad = true;
6175
}
6276
}

0 commit comments

Comments
 (0)