コード例 #1
0
ファイル: Core.php プロジェクト: crapougnax/t41
 /**
  * Universal factory for DataObject() and BaseObject() instances with caching capabilities
  * @param ObjectUri $uri
  * @param string $class
  * @param string $type
  * @throws Exception
  * @return \t41\ObjectModel\DataObject|t41\ObjectModel\BaseObject
  */
 public static function _($uri, $class = null, $type = ObjectModel::MODEL)
 {
     if (!$uri instanceof ObjectUri) {
         if (is_null($class)) {
             throw new Exception("Give ObjectUri() instance or specify object class as second argument");
         }
         $uri = new ObjectUri($uri);
         $uri->setClass($class);
     } else {
         $class = $uri->getClass();
     }
     if (self::getEnvData('cache_objects') !== true) {
         $obj = DataObject::factory($class);
         $obj->setUri($uri);
         Backend::read($obj);
         return $type == ObjectModel::MODEL ? new $class($obj) : $obj;
     }
     $def = ObjectModel::getObjectDna($class);
     if ($def && isset($def['unchanging'])) {
         // get cache version
         if (($obj = self::cacheGet($uri->getPermanentUUID())) !== false) {
             self::log(sprintf('[Persistence] Loaded %s object (%s) from cache', $class, $uri));
         } else {
             // done this away to avoid infinite recursion in BaseObject::__construct()
             $obj = DataObject::factory($class);
             $obj->setUri($uri);
             Backend::read($obj);
             $obj = new $class($obj);
             self::cacheSet($obj, $uri->getPermanentUUID(), true, array('tags' => array('permanent')));
             self::log(sprintf('[Persistence] Saved %s object (%s) in cache', $class, $uri));
         }
         return $type == ObjectModel::MODEL ? $obj : $obj->getDataObject();
     } else {
         $obj = DataObject::factory($class);
         $obj->setUri($uri);
         Backend::read($obj);
         return $type == ObjectModel::MODEL ? new $class($obj) : $obj;
     }
 }
コード例 #2
0
ファイル: AbstractAdapter.php プロジェクト: crapougnax/t41
 protected function _getTableFromUri(ObjectModel\ObjectUri $uri)
 {
     if ($uri instanceof ObjectModel\ObjectUri && $uri->getUrl()) {
         $els = explode('/', $uri->getUrl());
         if (count($els) > 1 && $els[count($els) - 2] != $this->_database) {
             return $els[count($els) - 2];
         } else {
             return $this->_getTableFromClass($uri->getClass());
         }
     } else {
         return $this->_getTableFromClass($uri->getClass());
     }
 }
コード例 #3
0
ファイル: ObjectModel.php プロジェクト: crapougnax/t41
 /**
  * Returns an instance of an object based on definition matching the given id
  * 
  * @param string|ObjectModel\ObjectUri $param class id or object uri
  * @throws ObjectModel\Exception
  * @return ObjectModel\BaseObject
  */
 public static function factory($param)
 {
     if ($param instanceof DataObject) {
         $class = $param->getClass();
         return new $class($param);
     }
     $class = $param instanceof ObjectModel\ObjectUri ? $param->getClass() : $param;
     if (!array_key_exists($class, self::$_config)) {
         throw new ObjectModel\Exception(array('NO_CLASS_DECLARATION', $class));
     }
     try {
         $obj = new $class($param instanceof ObjectModel\ObjectUri ? $param : null);
     } catch (ObjectModel\Exception $e) {
         die($e->getMessage());
     } catch (ObjectModel\DataObject\Exception $e) {
         die($e->getMessage());
     }
     return $obj;
 }