/** * Maps a single record into the object it represents and registers it as * reconstituted with the session. * * @param array $objectData * @return object * @throws Exception\InvalidObjectDataException * @throws PersistenceException */ public function mapToObject(array $objectData) { if ($objectData === []) { throw new Exception\InvalidObjectDataException('The array with object data was empty, probably object not found or access denied.', 1277974338); } if ($this->persistenceSession->hasIdentifier($objectData['identifier'])) { return $this->persistenceSession->getObjectByIdentifier($objectData['identifier']); } else { $className = $objectData['classname']; $classSchema = $this->reflectionService->getClassSchema($className); $object = unserialize('O:' . strlen($className) . ':"' . $className . '":0:{};'); $this->persistenceSession->registerObject($object, $objectData['identifier']); if ($classSchema->getModelType() === ClassSchema::MODELTYPE_ENTITY) { $this->persistenceSession->registerReconstitutedEntity($object, $objectData); } if ($objectData['properties'] === []) { if (!$classSchema->isLazyLoadableObject()) { throw new PersistenceException('The object of type "' . $className . '" is not marked as lazy loadable.', 1268309017); } $persistenceManager = $this->persistenceManager; $persistenceSession = $this->persistenceSession; $dataMapper = $this; $identifier = $objectData['identifier']; $modelType = $classSchema->getModelType(); $object->Flow_Persistence_LazyLoadingObject_thawProperties = function ($object) use($persistenceManager, $persistenceSession, $dataMapper, $identifier, $modelType) { $objectData = $persistenceManager->getObjectDataByIdentifier($identifier); $dataMapper->thawProperties($object, $identifier, $objectData); if ($modelType === ClassSchema::MODELTYPE_ENTITY) { $persistenceSession->registerReconstitutedEntity($object, $objectData); } }; } else { $this->thawProperties($object, $objectData['identifier'], $objectData); } return $object; } }
/** * Does it return the UUID for an object know to the identity map? * * @test */ public function getIdentifierByObjectReturnsUUIDForKnownObject() { $knownObject = $this->createMock(ProxyInterface::class); $fakeUUID = '123-456'; $session = new Persistence\Generic\Session(); $session->registerObject($knownObject, $fakeUUID); $this->assertEquals($fakeUUID, $session->getIdentifierByObject($knownObject)); }