1515use Doctrine \ODM \MongoDB \Mapping \ClassMetadata as DocumentClassMetadata ;
1616use Doctrine \ORM \Mapping \ClassMetadata as EntityClassMetadata ;
1717use Doctrine \ORM \Mapping \ClassMetadataInfo as LegacyEntityClassMetadata ;
18+ use Doctrine \ORM \Mapping \Driver \AttributeDriver ;
1819use Doctrine \Persistence \Mapping \ClassMetadata ;
1920use Doctrine \Persistence \Mapping \Driver \DefaultFileLocator ;
2021use Doctrine \Persistence \Mapping \Driver \MappingDriver ;
@@ -70,12 +71,18 @@ class ExtensionMetadataFactory
7071
7172 private ?CacheItemPoolInterface $ cacheItemPool = null ;
7273
74+ /**
75+ * Ignore doctrine driver class and force use attribute reader for gedmo properties
76+ * @var bool
77+ */
78+ private $ forceUseAttributeReader ;
79+
7380 /**
7481 * @param Reader|AttributeReader|object|null $annotationReader
7582 *
7683 * @note Providing any object as the third argument is deprecated, as of 4.0 an {@see AttributeReader} will be required
7784 */
78- public function __construct (ObjectManager $ objectManager , string $ extensionNamespace , ?object $ annotationReader = null , ?CacheItemPoolInterface $ cacheItemPool = null )
85+ public function __construct (ObjectManager $ objectManager , string $ extensionNamespace , ?object $ annotationReader = null , ?CacheItemPoolInterface $ cacheItemPool = null , bool $ forceUseAttributeReader = false )
7986 {
8087 if (null !== $ annotationReader ) {
8188 if ($ annotationReader instanceof Reader) {
@@ -101,6 +108,7 @@ public function __construct(ObjectManager $objectManager, string $extensionNames
101108 $ this ->objectManager = $ objectManager ;
102109 $ this ->annotationReader = $ annotationReader ;
103110 $ this ->extensionNamespace = $ extensionNamespace ;
111+ $ this ->forceUseAttributeReader = $ forceUseAttributeReader ;
104112 $ omDriver = $ objectManager ->getConfiguration ()->getMetadataDriverImpl ();
105113 $ this ->driver = $ this ->getDriver ($ omDriver );
106114 $ this ->cacheItemPool = $ cacheItemPool ;
@@ -205,11 +213,19 @@ protected function getDriver($omDriver)
205213 $ driverName = substr ($ className , strrpos ($ className , '\\' ) + 1 );
206214 if ($ omDriver instanceof MappingDriverChain || 'DriverChain ' === $ driverName ) {
207215 $ driver = new Chain ();
216+ $ attributeDriver = $ this ->forceUseAttributeReader ? new AttributeDriver ([], true ) : null ;
208217 foreach ($ omDriver ->getDrivers () as $ namespace => $ nestedOmDriver ) {
218+ if (!$ nestedOmDriver instanceof AttributeDriver && $ attributeDriver ) {
219+ $ nestedOmDriver = $ attributeDriver ;
220+ }
209221 $ driver ->addDriver ($ this ->getDriver ($ nestedOmDriver ), $ namespace );
210222 }
211- if (null !== $ omDriver ->getDefaultDriver ()) {
212- $ driver ->setDefaultDriver ($ this ->getDriver ($ omDriver ->getDefaultDriver ()));
223+ if ($ attributeDriver || null !== $ omDriver ->getDefaultDriver ()) {
224+ $ defDriver = $ omDriver ->getDefaultDriver ();
225+ if (!$ defDriver instanceof AttributeDriver && $ attributeDriver ) {
226+ $ defDriver = $ attributeDriver ;
227+ }
228+ $ driver ->setDefaultDriver ($ this ->getDriver ($ defDriver ));
213229 }
214230 } else {
215231 $ driverName = substr ($ driverName , 0 , strpos ($ driverName , 'Driver ' ));
0 commit comments