Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ a release.

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

## [3.20.1] - 2025-09-14
### Fixed
Expand Down
90 changes: 69 additions & 21 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
parameters:
ignoreErrors:
-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
identifier: method.notFound
count: 4
path: src/AbstractTrackingListener.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
identifier: method.notFound
count: 1
path: src/AbstractTrackingListener.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\ObjectManager\:\:getUnitOfWork\(\)\.$#'
identifier: method.notFound
Expand Down Expand Up @@ -73,13 +79,13 @@ parameters:
path: src/Loggable/Entity/Repository/LogEntryRepository.php

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

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

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Mapping/MappedEventSubscriber.php
Expand Down Expand Up @@ -235,7 +241,7 @@ parameters:
path: src/ReferenceIntegrity/ReferenceIntegrityListener.php

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

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
identifier: method.notFound
count: 4
path: src/ReferenceIntegrity/ReferenceIntegrityListener.php

-
message: '#^Access to offset ''inherited'' on an unknown class Doctrine\\ODM\\MongoDB\\Mapping\\AssociationFieldMapping\.$#'
identifier: class.notFound
count: 1
path: src/References/Mapping/Driver/Attribute.php

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

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

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
identifier: method.notFound
count: 2
count: 1
path: src/Sluggable/Handler/InversedRelativeSlugHandler.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Sluggable/Handler/InversedRelativeSlugHandler.php

-
Expand All @@ -361,9 +379,15 @@ parameters:
path: src/Sluggable/Handler/RelativeSlugHandler.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
identifier: method.notFound
count: 2
count: 1
path: src/Sluggable/Handler/TreeSlugHandler.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Sluggable/Handler/TreeSlugHandler.php

-
Expand Down Expand Up @@ -421,9 +445,15 @@ parameters:
path: src/Sluggable/SluggableListener.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
identifier: method.notFound
count: 7
count: 5
path: src/Sluggable/SluggableListener.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
identifier: method.notFound
count: 2
path: src/Sluggable/SluggableListener.php

-
Expand Down Expand Up @@ -493,9 +523,15 @@ parameters:
path: src/Sortable/Mapping/Driver/Yaml.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
identifier: method.notFound
count: 8
path: src/Sortable/SortableListener.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
identifier: method.notFound
count: 9
count: 1
path: src/Sortable/SortableListener.php

-
Expand Down Expand Up @@ -631,7 +667,7 @@ parameters:
path: src/Translatable/Query/TreeWalker/TranslationWalker.php

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

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

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

-
Expand All @@ -870,6 +906,12 @@ parameters:
count: 1
path: src/Tree/Strategy/AbstractMaterializedPath.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
identifier: method.notFound
count: 4
path: src/Tree/Strategy/AbstractMaterializedPath.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\ObjectManager\:\:getReference\(\)\.$#'
identifier: method.notFound
Expand Down Expand Up @@ -973,7 +1015,13 @@ parameters:
path: src/Uploadable/MimeType/MimeTypeGuesser.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getReflectionProperty\(\)\.$#'
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:getFieldValue\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Uploadable/UploadableListener.php

-
message: '#^Call to an undefined method Doctrine\\Persistence\\Mapping\\ClassMetadata\<object\>\:\:setFieldValue\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Uploadable/UploadableListener.php
Expand Down
11 changes: 5 additions & 6 deletions src/AbstractTrackingListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ public function onFlush(EventArgs $args)
}
$objectMeta = $om->getClassMetadata(get_class($changingObject));
$om->initializeObject($changingObject);
$value = $objectMeta->getReflectionProperty($trackedChild)->getValue($changingObject);
$value = $objectMeta->getFieldValue($changingObject, $trackedChild);
} else {
$value = $changes[1];
}
Expand Down Expand Up @@ -189,14 +189,14 @@ public function prePersist(EventArgs $args)
if ($config = $this->getConfiguration($om, $meta->getName())) {
if (isset($config['update'])) {
foreach ($config['update'] as $field) {
if (null === $meta->getReflectionProperty($field)->getValue($object)) { // let manual values
if (null === $meta->getFieldValue($object, $field)) { // let manual values
$this->updateField($object, $ea, $meta, $field);
}
}
}
if (isset($config['create'])) {
foreach ($config['create'] as $field) {
if (null === $meta->getReflectionProperty($field)->getValue($object)) { // let manual values
if (null === $meta->getFieldValue($object, $field)) { // let manual values
$this->updateField($object, $ea, $meta, $field);
}
}
Expand Down Expand Up @@ -227,8 +227,7 @@ abstract protected function getFieldValue($meta, $field, $eventAdapter);
*/
protected function updateField($object, $eventAdapter, $meta, $field)
{
$property = $meta->getReflectionProperty($field);
$oldValue = $property->getValue($object);
$oldValue = $meta->getFieldValue($object, $field);
$newValue = $this->getFieldValue($meta, $field, $eventAdapter);

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

$property->setValue($object, $newValue);
$meta->setFieldValue($object, $field, $newValue);

if ($object instanceof NotifyPropertyChanged) {
$uow = $eventAdapter->getObjectManager()->getUnitOfWork();
Expand Down
2 changes: 1 addition & 1 deletion src/Loggable/LoggableListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ public function postPersist(EventArgs $args)
$logEntryMeta = $om->getClassMetadata(get_class($logEntry));

$id = $wrapped->getIdentifier(false, true);
$logEntryMeta->getReflectionProperty('objectId')->setValue($logEntry, $id);
$logEntryMeta->setFieldValue($logEntry, 'objectId', $id);
$uow->scheduleExtraUpdate($logEntry, [
'objectId' => [null, $id],
]);
Expand Down
2 changes: 1 addition & 1 deletion src/Loggable/Mapping/Event/Adapter/ODM.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public function getNewVersion($meta, $object)
$dm = $this->getObjectManager();
$objectMeta = $dm->getClassMetadata(get_class($object));
$identifierField = $this->getSingleIdentifierFieldName($objectMeta);
$objectId = $objectMeta->getReflectionProperty($identifierField)->getValue($object);
$objectId = $objectMeta->getFieldValue($object, $identifierField);

$qb = $dm->createQueryBuilder($meta->getName());
$qb->select('version');
Expand Down
2 changes: 1 addition & 1 deletion src/Mapping/MappedEventSubscriber.php
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ protected function setFieldValue(AdapterInterface $adapter, $object, $field, $ol
$meta = $manager->getClassMetadata(get_class($object));
$uow = $manager->getUnitOfWork();

$meta->getReflectionProperty($field)->setValue($object, $newValue);
$meta->setFieldValue($object, $field, $newValue);
$uow->propertyChanged($object, $field, $oldValue, $newValue);
$adapter->recomputeSingleObjectChangeSet($uow, $meta, $object);
}
Expand Down
35 changes: 17 additions & 18 deletions src/ReferenceIntegrity/ReferenceIntegrityListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,7 @@ public function preRemove(EventArgs $args)

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

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

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

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

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

if ($meta->isCollectionValuedReference($property)) {
foreach ($refDoc as $refObj) {
$refReflProp->setValue($refObj, null);
$subMeta->setFieldValue($refObj, $mappedByField, null);
$om->persist($refObj);
}
} else {
$refReflProp->setValue($refDoc, null);
$subMeta->setFieldValue($refDoc, $mappedByField, null);
$om->persist($refDoc);
}

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

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

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

if (!$subMeta->isCollectionValuedReference($fieldMapping->mappedBy ?? $fieldMapping['mappedBy'])) {
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']));
if (!$subMeta->hasField($mappedByField)) {
throw new InvalidMappingException(sprintf('Unable to find reference integrity [%s] as mapped property in entity - %s', $mappedByField, $fieldMapping->targetDocument ?? $fieldMapping['targetDocument']));
}

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

if ($meta->isCollectionValuedReference($property)) {
foreach ($refDoc as $refObj) {
$collection = $refReflProp->getValue($refObj);
$collection = $subMeta->getFieldValue($refObj, $mappedByField);
$collection->removeElement($object);
$refReflProp->setValue($refObj, $collection);
$subMeta->setFieldValue($refObj, $mappedByField, $collection);
$om->persist($refObj);
}
} elseif (is_object($refDoc)) {
$collection = $refReflProp->getValue($refDoc);
$collection = $subMeta->getFieldValue($refDoc, $mappedByField);
$collection->removeElement($object);
$refReflProp->setValue($refDoc, $collection);
$subMeta->setFieldValue($refDoc, $mappedByField, $collection);
$om->persist($refDoc);
}

Expand Down
4 changes: 2 additions & 2 deletions src/References/Mapping/Event/Adapter/ODM.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public function getIdentifier($om, $object, $single = true)
$meta = $om->getClassMetadata(get_class($object));
$id = [];
foreach ($meta->getIdentifier() as $name) {
$id[$name] = $meta->getReflectionProperty($name)->getValue($object);
$id[$name] = $meta->getFieldValue($object, $name);
// return null if one of identifiers is missing
if (!$id[$name]) {
return null;
Expand Down Expand Up @@ -73,7 +73,7 @@ public function extractIdentifier($om, $object, $single = true)
if ($object instanceof GhostObjectInterface) {
$id = $om->getUnitOfWork()->getDocumentIdentifier($object);
} else {
$id = $meta->getReflectionProperty($meta->getIdentifier()[0])->getValue($object);
$id = $meta->getFieldValue($object, $meta->getIdentifier()[0]);
}

if ($single || !$id) {
Expand Down
Loading
Loading