示例#1
0
 /**
  * @throws Exception
  * @param string $key
  * @return void
  */
 public function initResource($key = null)
 {
     $myClass = get_class($this);
     $resource = null;
     if (!$key) {
         // check for a resource in the cache
         if (array_key_exists($myClass, self::$resourceClassCache)) {
             $resource = self::$resourceClassCache[$myClass];
         } else {
             $classes = $this->getParentClasses($myClass);
             foreach ($classes as $class) {
                 $classParts = explode("_", $class);
                 $length = count($classParts);
                 $className = null;
                 for ($i = 0; $i < $length; $i++) {
                     // check for a specialized resource adapter for the current DBMS
                     $tmpClassName = implode("_", $classParts) . "_Resource_" . ucfirst(Pimcore_Resource::getType());
                     if ($className = $this->determineResourceClass($tmpClassName)) {
                         break;
                     }
                     // check for a general DBMS resource adapter
                     $tmpClassName = implode("_", $classParts) . "_Resource";
                     if ($className = $this->determineResourceClass($tmpClassName)) {
                         break;
                     }
                     array_pop($classParts);
                 }
                 if ($className) {
                     Logger::debug("Find resource implementation " . $className . " for " . $myClass);
                     $resource = $className;
                     self::$resourceClassCache[$myClass] = $resource;
                     break;
                 }
             }
         }
     } else {
         // check for a specialized resource adapter for the current DBMS
         $resourceClass = $key . "_Resource_" . ucfirst(Pimcore_Resource::getType());
         if (!($resource = $this->determineResourceClass($resourceClass))) {
             $resource = $key . "_Resource";
         }
     }
     if (!$resource) {
         Logger::critical("No resource implementation found for: " . $myClass);
         throw new Exception("No resource implementation found for: " . $myClass);
     }
     $this->resource = new $resource();
     $this->resource->setModel($this);
     $db = Pimcore_Resource::get();
     $this->resource->configure($db);
     if (method_exists($this->resource, "init")) {
         $this->resource->init();
     }
 }