Skip to content

Commit 3ba0096

Browse files
ker0xphansys
authored andcommitted
Use getFieldValue and setFieldValue methods
Add sluggable test with embeddable Update CHANGELOG
1 parent 264c25a commit 3ba0096

File tree

31 files changed

+443
-186
lines changed

31 files changed

+443
-186
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ a release.
2121

2222
### Changed
2323
- Sluggable: Replaced abandoned `behat/transliterator` with `symfony/string` for default transliteration and urlization steps (#2985)
24+
- Use `getFieldValue` and `setFieldValue` methods to support `doctrine/orm` >= 3.4 (#2966)
2425

2526
## [3.20.1] - 2025-09-14
2627
### Fixed

phpstan-baseline.neon

Lines changed: 69 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
parameters:
22
ignoreErrors:
33
-
4-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
4+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
55
identifier: method.notFound
66
count: 4
77
path: src/AbstractTrackingListener.php
88

9+
-
10+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
11+
identifier: method.notFound
12+
count: 1
13+
path: src/AbstractTrackingListener.php
14+
915
-
1016
message: '#^Call to an undefined method Doctrine\\Persistence\\ObjectManager\:\:getUnitOfWork\(\)\.$#'
1117
identifier: method.notFound
@@ -73,13 +79,13 @@ parameters:
7379
path: src/Loggable/Entity/Repository/LogEntryRepository.php
7480

7581
-
76-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<Gedmo\\Loggable\\LogEntryInterface\<T of object\>\>\:\:getReflectionProperty\(\)\.$#'
82+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<Gedmo\\Loggable\\LogEntryInterface\<T of object\>\>\:\:newInstance\(\)\.$#'
7783
identifier: method.notFound
7884
count: 1
7985
path: src/Loggable/LoggableListener.php
8086

8187
-
82-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<Gedmo\\Loggable\\LogEntryInterface\<T of object\>\>\:\:newInstance\(\)\.$#'
88+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<Gedmo\\Loggable\\LogEntryInterface\<T of object\>\>\:\:setFieldValue\(\)\.$#'
8389
identifier: method.notFound
8490
count: 1
8591
path: src/Loggable/LoggableListener.php
@@ -205,7 +211,7 @@ parameters:
205211
path: src/Mapping/ExtensionMetadataFactory.php
206212

207213
-
208-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
214+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
209215
identifier: method.notFound
210216
count: 1
211217
path: src/Mapping/MappedEventSubscriber.php
@@ -235,7 +241,7 @@ parameters:
235241
path: src/ReferenceIntegrity/ReferenceIntegrityListener.php
236242

237243
-
238-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
244+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
239245
identifier: method.notFound
240246
count: 3
241247
path: src/ReferenceIntegrity/ReferenceIntegrityListener.php
@@ -252,14 +258,20 @@ parameters:
252258
count: 1
253259
path: src/ReferenceIntegrity/ReferenceIntegrityListener.php
254260

261+
-
262+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
263+
identifier: method.notFound
264+
count: 4
265+
path: src/ReferenceIntegrity/ReferenceIntegrityListener.php
266+
255267
-
256268
message: '#^Access to offset ''inherited'' on an unknown class Doctrine\\ODM\\MongoDB\\Mapping\\AssociationFieldMapping\.$#'
257269
identifier: class.notFound
258270
count: 1
259271
path: src/References/Mapping/Driver/Attribute.php
260272

261273
-
262-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
274+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
263275
identifier: method.notFound
264276
count: 1
265277
path: src/References/Mapping/Event/Adapter/ODM.php
@@ -283,7 +295,7 @@ parameters:
283295
path: src/References/Mapping/Event/Adapter/ODM.php
284296

285297
-
286-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
298+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
287299
identifier: method.notFound
288300
count: 2
289301
path: src/References/Mapping/Event/Adapter/ORM.php
@@ -343,9 +355,15 @@ parameters:
343355
path: src/References/ReferencesListener.php
344356

345357
-
346-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
358+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
347359
identifier: method.notFound
348-
count: 2
360+
count: 1
361+
path: src/Sluggable/Handler/InversedRelativeSlugHandler.php
362+
363+
-
364+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
365+
identifier: method.notFound
366+
count: 1
349367
path: src/Sluggable/Handler/InversedRelativeSlugHandler.php
350368

351369
-
@@ -361,9 +379,15 @@ parameters:
361379
path: src/Sluggable/Handler/RelativeSlugHandler.php
362380

363381
-
364-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
382+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
365383
identifier: method.notFound
366-
count: 2
384+
count: 1
385+
path: src/Sluggable/Handler/TreeSlugHandler.php
386+
387+
-
388+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
389+
identifier: method.notFound
390+
count: 1
367391
path: src/Sluggable/Handler/TreeSlugHandler.php
368392

369393
-
@@ -421,9 +445,15 @@ parameters:
421445
path: src/Sluggable/SluggableListener.php
422446

423447
-
424-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
448+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
425449
identifier: method.notFound
426-
count: 7
450+
count: 5
451+
path: src/Sluggable/SluggableListener.php
452+
453+
-
454+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
455+
identifier: method.notFound
456+
count: 2
427457
path: src/Sluggable/SluggableListener.php
428458

429459
-
@@ -493,9 +523,15 @@ parameters:
493523
path: src/Sortable/Mapping/Driver/Yaml.php
494524

495525
-
496-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
526+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
527+
identifier: method.notFound
528+
count: 8
529+
path: src/Sortable/SortableListener.php
530+
531+
-
532+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
497533
identifier: method.notFound
498-
count: 9
534+
count: 1
499535
path: src/Sortable/SortableListener.php
500536

501537
-
@@ -631,7 +667,7 @@ parameters:
631667
path: src/Translatable/Query/TreeWalker/TranslationWalker.php
632668

633669
-
634-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
670+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
635671
identifier: method.notFound
636672
count: 1
637673
path: src/Translatable/TranslatableListener.php
@@ -853,15 +889,15 @@ parameters:
853889
path: src/Tree/Strategy/AbstractMaterializedPath.php
854890

855891
-
856-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getIdentifierValue\(\)\.$#'
892+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
857893
identifier: method.notFound
858-
count: 1
894+
count: 8
859895
path: src/Tree/Strategy/AbstractMaterializedPath.php
860896

861897
-
862-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
898+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getIdentifierValue\(\)\.$#'
863899
identifier: method.notFound
864-
count: 10
900+
count: 1
865901
path: src/Tree/Strategy/AbstractMaterializedPath.php
866902

867903
-
@@ -870,6 +906,12 @@ parameters:
870906
count: 1
871907
path: src/Tree/Strategy/AbstractMaterializedPath.php
872908

909+
-
910+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
911+
identifier: method.notFound
912+
count: 4
913+
path: src/Tree/Strategy/AbstractMaterializedPath.php
914+
873915
-
874916
message: '#^Call to an undefined method Doctrine\\Persistence\\ObjectManager\:\:getReference\(\)\.$#'
875917
identifier: method.notFound
@@ -973,7 +1015,13 @@ parameters:
9731015
path: src/Uploadable/MimeType/MimeTypeGuesser.php
9741016

9751017
-
976-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
1018+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
1019+
identifier: method.notFound
1020+
count: 1
1021+
path: src/Uploadable/UploadableListener.php
1022+
1023+
-
1024+
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
9771025
identifier: method.notFound
9781026
count: 1
9791027
path: src/Uploadable/UploadableListener.php

src/AbstractTrackingListener.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public function onFlush(EventArgs $args)
149149
}
150150
$objectMeta = $om->getClassMetadata(get_class($changingObject));
151151
$om->initializeObject($changingObject);
152-
$value = $objectMeta->getReflectionProperty($trackedChild)->getValue($changingObject);
152+
$value = $objectMeta->getFieldValue($changingObject, $trackedChild);
153153
} else {
154154
$value = $changes[1];
155155
}
@@ -189,14 +189,14 @@ public function prePersist(EventArgs $args)
189189
if ($config = $this->getConfiguration($om, $meta->getName())) {
190190
if (isset($config['update'])) {
191191
foreach ($config['update'] as $field) {
192-
if (null === $meta->getReflectionProperty($field)->getValue($object)) { // let manual values
192+
if (null === $meta->getFieldValue($object, $field)) { // let manual values
193193
$this->updateField($object, $ea, $meta, $field);
194194
}
195195
}
196196
}
197197
if (isset($config['create'])) {
198198
foreach ($config['create'] as $field) {
199-
if (null === $meta->getReflectionProperty($field)->getValue($object)) { // let manual values
199+
if (null === $meta->getFieldValue($object, $field)) { // let manual values
200200
$this->updateField($object, $ea, $meta, $field);
201201
}
202202
}
@@ -227,8 +227,7 @@ abstract protected function getFieldValue($meta, $field, $eventAdapter);
227227
*/
228228
protected function updateField($object, $eventAdapter, $meta, $field)
229229
{
230-
$property = $meta->getReflectionProperty($field);
231-
$oldValue = $property->getValue($object);
230+
$oldValue = $meta->getFieldValue($object, $field);
232231
$newValue = $this->getFieldValue($meta, $field, $eventAdapter);
233232

234233
// if field value is reference, persist object
@@ -241,7 +240,7 @@ protected function updateField($object, $eventAdapter, $meta, $field)
241240
}
242241
}
243242

244-
$property->setValue($object, $newValue);
243+
$meta->setFieldValue($object, $field, $newValue);
245244

246245
if ($object instanceof NotifyPropertyChanged) {
247246
$uow = $eventAdapter->getObjectManager()->getUnitOfWork();

src/Loggable/LoggableListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ public function postPersist(EventArgs $args)
173173
$logEntryMeta = $om->getClassMetadata(get_class($logEntry));
174174

175175
$id = $wrapped->getIdentifier(false, true);
176-
$logEntryMeta->getReflectionProperty('objectId')->setValue($logEntry, $id);
176+
$logEntryMeta->setFieldValue($logEntry, 'objectId', $id);
177177
$uow->scheduleExtraUpdate($logEntry, [
178178
'objectId' => [null, $id],
179179
]);

src/Loggable/Mapping/Event/Adapter/ODM.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public function getNewVersion($meta, $object)
4343
$dm = $this->getObjectManager();
4444
$objectMeta = $dm->getClassMetadata(get_class($object));
4545
$identifierField = $this->getSingleIdentifierFieldName($objectMeta);
46-
$objectId = $objectMeta->getReflectionProperty($identifierField)->getValue($object);
46+
$objectId = $objectMeta->getFieldValue($object, $identifierField);
4747

4848
$qb = $dm->createQueryBuilder($meta->getName());
4949
$qb->select('version');

src/Mapping/MappedEventSubscriber.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ protected function setFieldValue(AdapterInterface $adapter, $object, $field, $ol
307307
$meta = $manager->getClassMetadata(get_class($object));
308308
$uow = $manager->getUnitOfWork();
309309

310-
$meta->getReflectionProperty($field)->setValue($object, $newValue);
310+
$meta->setFieldValue($object, $field, $newValue);
311311
$uow->propertyChanged($object, $field, $oldValue, $newValue);
312312
$adapter->recomputeSingleObjectChangeSet($uow, $meta, $object);
313313
}

src/ReferenceIntegrity/ReferenceIntegrityListener.php

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ public function preRemove(EventArgs $args)
7676

7777
if ($config = $this->getConfiguration($om, $meta->getName())) {
7878
foreach ($config['referenceIntegrity'] as $property => $action) {
79-
$reflProp = $meta->getReflectionProperty($property);
80-
$refDoc = $reflProp->getValue($object);
79+
$refDoc = $meta->getFieldValue($object, $property);
8180
$fieldMapping = $meta->getFieldMapping($property);
8281

8382
switch ($action) {
@@ -90,19 +89,19 @@ public function preRemove(EventArgs $args)
9089

9190
$subMeta = $om->getClassMetadata($fieldMapping->targetDocument ?? $fieldMapping['targetDocument']);
9291

93-
if (!$subMeta->hasField($fieldMapping->mappedBy ?? $fieldMapping['mappedBy'])) {
94-
throw new InvalidMappingException(sprintf('Unable to find reference integrity [%s] as mapped property in entity - %s', $fieldMapping->mappedBy ?? $fieldMapping['mappedBy'], $fieldMapping->targetDocument ?? $fieldMapping['targetDocument']));
95-
}
92+
$mappedByField = $fieldMapping->mappedBy ?? $fieldMapping['mappedBy'];
9693

97-
$refReflProp = $subMeta->getReflectionProperty($fieldMapping->mappedBy ?? $fieldMapping['mappedBy']);
94+
if (!$subMeta->hasField($mappedByField)) {
95+
throw new InvalidMappingException(sprintf('Unable to find reference integrity [%s] as mapped property in entity - %s', $mappedByField, $fieldMapping->targetDocument ?? $fieldMapping['targetDocument']));
96+
}
9897

9998
if ($meta->isCollectionValuedReference($property)) {
10099
foreach ($refDoc as $refObj) {
101-
$refReflProp->setValue($refObj, null);
100+
$subMeta->setFieldValue($refObj, $mappedByField, null);
102101
$om->persist($refObj);
103102
}
104103
} else {
105-
$refReflProp->setValue($refDoc, null);
104+
$subMeta->setFieldValue($refDoc, $mappedByField, null);
106105
$om->persist($refDoc);
107106
}
108107

@@ -116,27 +115,27 @@ public function preRemove(EventArgs $args)
116115

117116
$subMeta = $om->getClassMetadata($fieldMapping->targetDocument ?? $fieldMapping['targetDocument']);
118117

119-
if (!$subMeta->hasField($fieldMapping->mappedBy ?? $fieldMapping['mappedBy'])) {
120-
throw new InvalidMappingException(sprintf('Unable to find reference integrity [%s] as mapped property in entity - %s', $fieldMapping->mappedBy ?? $fieldMapping['mappedBy'], $fieldMapping->targetDocument ?? $fieldMapping['targetDocument']));
121-
}
118+
$mappedByField = $fieldMapping->mappedBy ?? $fieldMapping['mappedBy'];
122119

123-
if (!$subMeta->isCollectionValuedReference($fieldMapping->mappedBy ?? $fieldMapping['mappedBy'])) {
124-
throw new InvalidMappingException(sprintf('Reference integrity [%s] mapped property in entity - %s should be a Reference Many', $fieldMapping->mappedBy ?? $fieldMapping['mappedBy'], $fieldMapping->targetDocument ?? $fieldMapping['targetDocument']));
120+
if (!$subMeta->hasField($mappedByField)) {
121+
throw new InvalidMappingException(sprintf('Unable to find reference integrity [%s] as mapped property in entity - %s', $mappedByField, $fieldMapping->targetDocument ?? $fieldMapping['targetDocument']));
125122
}
126123

127-
$refReflProp = $subMeta->getReflectionProperty($fieldMapping->mappedBy ?? $fieldMapping['mappedBy']);
124+
if (!$subMeta->isCollectionValuedReference($mappedByField)) {
125+
throw new InvalidMappingException(sprintf('Reference integrity [%s] mapped property in entity - %s should be a Reference Many', $mappedByField, $fieldMapping->targetDocument ?? $fieldMapping['targetDocument']));
126+
}
128127

129128
if ($meta->isCollectionValuedReference($property)) {
130129
foreach ($refDoc as $refObj) {
131-
$collection = $refReflProp->getValue($refObj);
130+
$collection = $subMeta->getFieldValue($refObj, $mappedByField);
132131
$collection->removeElement($object);
133-
$refReflProp->setValue($refObj, $collection);
132+
$subMeta->setFieldValue($refObj, $mappedByField, $collection);
134133
$om->persist($refObj);
135134
}
136135
} elseif (is_object($refDoc)) {
137-
$collection = $refReflProp->getValue($refDoc);
136+
$collection = $subMeta->getFieldValue($refDoc, $mappedByField);
138137
$collection->removeElement($object);
139-
$refReflProp->setValue($refDoc, $collection);
138+
$subMeta->setFieldValue($refDoc, $mappedByField, $collection);
140139
$om->persist($refDoc);
141140
}
142141

src/References/Mapping/Event/Adapter/ODM.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public function getIdentifier($om, $object, $single = true)
3838
$meta = $om->getClassMetadata(get_class($object));
3939
$id = [];
4040
foreach ($meta->getIdentifier() as $name) {
41-
$id[$name] = $meta->getReflectionProperty($name)->getValue($object);
41+
$id[$name] = $meta->getFieldValue($object, $name);
4242
// return null if one of identifiers is missing
4343
if (!$id[$name]) {
4444
return null;
@@ -73,7 +73,7 @@ public function extractIdentifier($om, $object, $single = true)
7373
if ($object instanceof GhostObjectInterface) {
7474
$id = $om->getUnitOfWork()->getDocumentIdentifier($object);
7575
} else {
76-
$id = $meta->getReflectionProperty($meta->getIdentifier()[0])->getValue($object);
76+
$id = $meta->getFieldValue($object, $meta->getIdentifier()[0]);
7777
}
7878

7979
if ($single || !$id) {

0 commit comments

Comments
 (0)