예제 #1
0
 /**
  * Stores or updates an object in the underlying storage.
  *
  * @param object $object The object to persist
  * @param string $parentIdentifier
  * @return string
  * @api
  */
 protected function persistObject($object, $parentIdentifier)
 {
     if (isset($this->visitedDuringPersistence[$object])) {
         return $this->visitedDuringPersistence[$object];
     }
     $identifier = $this->persistenceSession->getIdentifierByObject($object);
     $this->visitedDuringPersistence[$object] = $identifier;
     $objectData = array();
     $objectState = $this->storeObject($object, $identifier, $parentIdentifier, $objectData);
     if ($this->reflectionService->getClassSchema($object)->getModelType() === \TYPO3\FLOW3\Reflection\ClassSchema::MODELTYPE_ENTITY) {
         $this->persistenceSession->registerReconstitutedEntity($object, $objectData);
     }
     $this->emitPersistedObject($object, $objectState);
     return $identifier;
 }
예제 #2
0
파일: DataMapper.php 프로젝트: nxpthx/FLOW3
 /**
  * Maps a single record into the object it represents and registers it as
  * reconstituted with the session.
  *
  * @param array $objectData
  * @return object
  * @throws \TYPO3\FLOW3\Persistence\Generic\Exception\InvalidObjectDataException
  * @throws \TYPO3\FLOW3\Persistence\Exception
  */
 public function mapToObject(array $objectData)
 {
     if ($objectData === array()) {
         throw new \TYPO3\FLOW3\Persistence\Generic\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() === \TYPO3\FLOW3\Reflection\ClassSchema::MODELTYPE_ENTITY) {
             $this->persistenceSession->registerReconstitutedEntity($object, $objectData);
         }
         if ($objectData['properties'] === array()) {
             if (!$classSchema->isLazyLoadableObject()) {
                 throw new \TYPO3\FLOW3\Persistence\Exception('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->FLOW3_Persistence_LazyLoadingObject_thawProperties = function ($object) use($persistenceManager, $persistenceSession, $dataMapper, $identifier, $modelType) {
                 $objectData = $persistenceManager->getObjectDataByIdentifier($identifier);
                 $dataMapper->thawProperties($object, $identifier, $objectData);
                 if ($modelType === \TYPO3\FLOW3\Reflection\ClassSchema::MODELTYPE_ENTITY) {
                     $persistenceSession->registerReconstitutedEntity($object, $objectData);
                 }
             };
         } else {
             $this->thawProperties($object, $objectData['identifier'], $objectData);
         }
         return $object;
     }
 }