1616use Doctrine \ORM \Event \LoadClassMetadataEventArgs ;
1717use Doctrine \ORM \Mapping \ClassMetadata ;
1818use Doctrine \ORM \Mapping \ClassMetadataInfo ;
19+ use Ecommit \CrudBundle \Entity \UserCrudInterface ;
20+ use Ecommit \CrudBundle \Entity \UserCrudSettings ;
1921
2022final 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