Pimcore\Model\AbstractModel::initDao PHP Метод

initDao() публичный Метод

public initDao ( null $key = null, boolean $forceDetection = false )
$key null
$forceDetection boolean
    public function initDao($key = null, $forceDetection = false)
    {
        $myClass = get_class($this);
        $cacheKey = $myClass . ($key ? "-" . $key : "");
        $dao = null;
        if (!$forceDetection && array_key_exists($cacheKey, self::$daoClassCache)) {
            $dao = self::$daoClassCache[$cacheKey];
        } elseif (!$key || $forceDetection) {
            $classes = $this->getParentClasses($key ? $key : $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 dao adapter
                    $tmpClassName = implode($delimiter, $classParts) . $delimiter . "Dao";
                    if ($className = $this->determineResourceClass($tmpClassName)) {
                        break;
                    }
                    // check for the old style resource adapter
                    $tmpClassName = implode($delimiter, $classParts) . $delimiter . "Resource";
                    if ($className = $this->determineResourceClass($tmpClassName)) {
                        break;
                    }
                    array_pop($classParts);
                }
                if ($className) {
                    $dao = $className;
                    self::$daoClassCache[$cacheKey] = $dao;
                    break;
                }
            }
        } elseif ($key) {
            $delimiter = "_";
            // old prefixed class style
            if (strpos($key, "\\") !== false) {
                $delimiter = "\\";
                // that's the new with namespaces
            }
            $dao = $key . $delimiter . "Dao";
            self::$daoClassCache[$cacheKey] = $dao;
        }
        if (!$dao) {
            Logger::critical("No dao implementation found for: " . $myClass);
            throw new \Exception("No dao implementation found for: " . $myClass);
        }
        $dao = "\\" . ltrim($dao, "\\");
        $this->dao = new $dao();
        $this->dao->setModel($this);
        $this->dao->configure();
        if (method_exists($this->dao, "init")) {
            $this->dao->init();
        }
    }