/** * @param null $key * @throws \Exception */ 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) { $delimiter = "_"; // old prefixed class style if (strpos($class, "\\")) { $delimiter = "\\"; // that's the new with namespaces } $classParts = explode($delimiter, $class); $length = count($classParts); $className = null; for ($i = 0; $i < $length; $i++) { // check for a general DBMS resource adapter $tmpClassName = implode($delimiter, $classParts) . $delimiter . "Resource"; if ($className = $this->determineResourceClass($tmpClassName)) { break; } // this is just for compatibility anymore, this was before the standard way // but as there will not be a specialized implementation anymore eg. Oracle, PostgreSQL, ... // we can move that below the general resource adapter as a fallback $tmpClassName = implode($delimiter, $classParts) . $delimiter . "Resource" . $delimiter . ucfirst(Resource::getType()); if ($className = $this->determineResourceClass($tmpClassName)) { break; } array_pop($classParts); } if ($className && $className != "Pimcore\\Resource") { //\Logger::debug("Found resource implementation " . $className . " for " . $myClass); $resource = $className; self::$resourceClassCache[$myClass] = $resource; break; } } } } else { // check in cache $cacheKey = $myClass . "-" . $key; if (array_key_exists($cacheKey, self::$resourceClassCache)) { $resource = self::$resourceClassCache[$cacheKey]; } else { $delimiter = "_"; // old prefixed class style if (strpos($key, "\\") !== false) { $delimiter = "\\"; // that's the new with namespaces } // check for a specialized resource adapter for the current DBMS $resourceClass = $key . $delimiter . "Resource" . $delimiter . ucfirst(Resource::getType()); if (!($resource = $this->determineResourceClass($resourceClass))) { $resource = $key . $delimiter . "Resource"; } self::$resourceClassCache[$cacheKey] = $resource; } } if (!$resource) { \Logger::critical("No resource implementation found for: " . $myClass); throw new \Exception("No resource implementation found for: " . $myClass); } $resource = "\\" . ltrim($resource, "\\"); $this->resource = new $resource(); $this->resource->setModel($this); $db = Resource::get(); $this->resource->configure($db); if (method_exists($this->resource, "init")) { $this->resource->init(); } }
public function __construct() { parent::__construct(); $this->db = \Pimcore\Resource::get(); }