Pimcore\Loader\ClassMapAutoloader::autoload PHP Method

autoload() public method

public autoload ( $class )
    public function autoload($class)
    {
        // manual aliasing
        $classAliases = ["Pimcore\\Resource" => "Pimcore\\Db", "Pimcore_Resource" => "Pimcore\\Db", "Pimcore\\Resource\\Mysql" => "Pimcore\\Db", "Pimcore_Resource_Mysql" => "Pimcore\\Db", "Pimcore\\Log\\Log" => "Pimcore\\Log\\ApplicationLogger", "Pimcore\\Log\\Writer\\Db" => "Pimcore\\Log\\Handler\\ApplicationLoggerDb", "Pimcore\\Model\\Cache" => "Pimcore\\Cache", "Logger" => "Pimcore\\Logger"];
        if (array_key_exists($class, $classAliases)) {
            class_alias($classAliases[$class], $class);
            return;
        }
        parent::autoload($class);
        // compatibility from Resource => Dao
        if (strpos($class, "Resource") && !class_exists($class, false) && !interface_exists($class, false)) {
            $daoClass = str_replace("Resource", "Dao", $class);
            if (Tool::classExists($daoClass) || Tool::interfaceExists($daoClass)) {
                if (!class_exists($class, false) && !interface_exists($class, false)) {
                    class_alias($daoClass, $class);
                }
            }
        }
        // reverse compatibility from namespaced to prefixed class names e.g. Pimcore\Model\Document => Document
        if (strpos($class, "Pimcore\\") === 0) {
            // first check for a model, if it doesnt't work fall back to the default autoloader
            if (!class_exists($class, false) && !interface_exists($class, false)) {
                if (!$this->loadModel($class)) {
                    $loader = \Zend_Loader_Autoloader::getInstance();
                    $loader->autoload($class);
                }
            }
            if (class_exists($class, false) || interface_exists($class, false)) {
                // create an alias
                $alias = str_replace("\\", "_", $class);
                $alias = preg_replace("/_Abstract([^_]+)/", "_Abstract", $alias);
                $alias = preg_replace("/_[^_]+Interface/", "_Interface", $alias);
                $alias = str_replace("_Listing_", "_List_", $alias);
                $alias = preg_replace("/_Listing\$/", "_List", $alias);
                $alias = str_replace("Object_ClassDefinition", "Object_Class", $alias);
                if (strpos($alias, "Pimcore_Model") === 0) {
                    if (!preg_match("/^Pimcore_Model_(Abstract|List|Resource|Cache)/", $alias)) {
                        $alias = str_replace("Pimcore_Model_", "", $alias);
                    }
                }
                if (!class_exists($alias, false) && !interface_exists($alias, false)) {
                    class_alias($class, $alias);
                    return;
                    // skip here, nothing more to do ...
                }
            }
        }
        // compatibility layer from prefixed to namespaced e.g. Document => Pimcore\Model\Document
        $isLegacyClass = preg_match("/^(Pimcore_|Asset|Dependency|Document|Element|Glossary|Metadata|Object|Property|Redirect|Schedule|Site|Staticroute|Tool|Translation|User|Version|Webservice|WebsiteSetting|Search)/", $class);
        if (!class_exists($class, false) && !interface_exists($class, false) && $isLegacyClass) {
            // this is for debugging purposes, to find legacy class names
            if (PIMCORE_DEBUG) {
                $backtrace = debug_backtrace();
                foreach ($backtrace as $step) {
                    if (isset($step["file"]) && !empty($step["file"]) && $step["function"] != "class_exists") {
                        $logName = "legacy-class-names";
                        if (preg_match("@^" . preg_quote(PIMCORE_PATH, "@") . "@", $step["file"])) {
                            $logName .= "-admin";
                        }
                        \Pimcore\Log\Simple::log($logName, $class . " used in " . $step["file"] . " at line " . $step["line"]);
                        break;
                    }
                }
            }
            $namespacedClass = $class;
            $namespacedClass = str_replace("_List", "_Listing", $namespacedClass);
            $namespacedClass = str_replace("Object_Class", "Object_ClassDefinition", $namespacedClass);
            $namespacedClass = preg_replace("/([^_]+)_Abstract\$/", "\$1_Abstract\$1", $namespacedClass);
            $namespacedClass = preg_replace("/([^_]+)_Interface\$/", "\$1_\$1Interface", $namespacedClass);
            $namespacedClass = str_replace("_", "\\", $namespacedClass);
            if (strpos($namespacedClass, "Pimcore") !== 0) {
                $namespacedClass = "Pimcore\\Model\\" . $namespacedClass;
            }
            // check if the class is a model, if so, load it
            $this->loadModel($namespacedClass);
            if (Tool::classExists($namespacedClass) || Tool::interfaceExists($namespacedClass)) {
                if (!class_exists($class, false) && !interface_exists($class, false)) {
                    class_alias($namespacedClass, $class);
                }
            }
        }
    }
ClassMapAutoloader