15
15
use Doctrine \ODM \MongoDB \Mapping \ClassMetadata as DocumentClassMetadata ;
16
16
use Doctrine \ORM \Mapping \ClassMetadata as EntityClassMetadata ;
17
17
use Doctrine \ORM \Mapping \ClassMetadataInfo as LegacyEntityClassMetadata ;
18
+ use Doctrine \ORM \Mapping \Driver \AttributeDriver ;
18
19
use Doctrine \Persistence \Mapping \ClassMetadata ;
19
20
use Doctrine \Persistence \Mapping \Driver \DefaultFileLocator ;
20
21
use Doctrine \Persistence \Mapping \Driver \MappingDriver ;
@@ -70,12 +71,18 @@ class ExtensionMetadataFactory
70
71
71
72
private ?CacheItemPoolInterface $ cacheItemPool = null ;
72
73
74
+ /**
75
+ * Ignore doctrine driver class and force use attribute reader for gedmo properties
76
+ * @var bool
77
+ */
78
+ private $ forceUseAttributeReader ;
79
+
73
80
/**
74
81
* @param Reader|AttributeReader|object|null $annotationReader
75
82
*
76
83
* @note Providing any object as the third argument is deprecated, as of 4.0 an {@see AttributeReader} will be required
77
84
*/
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 )
79
86
{
80
87
if (null !== $ annotationReader ) {
81
88
if ($ annotationReader instanceof Reader) {
@@ -101,6 +108,7 @@ public function __construct(ObjectManager $objectManager, string $extensionNames
101
108
$ this ->objectManager = $ objectManager ;
102
109
$ this ->annotationReader = $ annotationReader ;
103
110
$ this ->extensionNamespace = $ extensionNamespace ;
111
+ $ this ->forceUseAttributeReader = $ forceUseAttributeReader ;
104
112
$ omDriver = $ objectManager ->getConfiguration ()->getMetadataDriverImpl ();
105
113
$ this ->driver = $ this ->getDriver ($ omDriver );
106
114
$ this ->cacheItemPool = $ cacheItemPool ;
@@ -205,11 +213,19 @@ protected function getDriver($omDriver)
205
213
$ driverName = substr ($ className , strrpos ($ className , '\\' ) + 1 );
206
214
if ($ omDriver instanceof MappingDriverChain || 'DriverChain ' === $ driverName ) {
207
215
$ driver = new Chain ();
216
+ $ attributeDriver = $ this ->forceUseAttributeReader ? new AttributeDriver ([], true ) : null ;
208
217
foreach ($ omDriver ->getDrivers () as $ namespace => $ nestedOmDriver ) {
218
+ if (!$ nestedOmDriver instanceof AttributeDriver && $ attributeDriver ) {
219
+ $ nestedOmDriver = $ attributeDriver ;
220
+ }
209
221
$ driver ->addDriver ($ this ->getDriver ($ nestedOmDriver ), $ namespace );
210
222
}
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 ));
213
229
}
214
230
} else {
215
231
$ driverName = substr ($ driverName , 0 , strpos ($ driverName , 'Driver ' ));
0 commit comments