Non appena viene effettuata una richiesta a Magento, il primo script che parte è index.php che al suo interno richiama la classe Mage (Mage::App) all’interno include il file Varien/Autoload dove appunto si trova l’autoloader.
L’autoloader di Magento di fatto utilizza il pattern factory.
Vengono prima definite un po’ di costanti per le directory e i separatori
1 2 3 4 | // #app/Mage.php define('DS', DIRECTORY_SEPARATOR); define('PS', PATH_SEPARATOR); define('BP', dirname(dirname(__FILE__))); |
Quindi i code pools vengono caricati nel config path di php
1 2 3 4 5 6 7 8 9 10 | // #app/Mage.php //definizione dei code pools: local - community - core $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'local'; $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'community'; $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'core'; $paths[] = BP . DS . 'lib'; $appPath = implode(PS, $paths); set_include_path($appPath . PS . Mage::registry('original_include_path')); //qui viene richiamato l'autoloader include_once "Mage/Core/functions.php"; include_once "Varien/Autoload.php"; |
e infine viene richiamato l’autoloader.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // #lib/Varien/Autoload.php public function autoload($class) { if ($this->_collectClasses) { $this->_arrLoadedClasses[self::$_scope][] = $class; } if ($this->_isIncludePathDefined) { $classFile = COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . $class; } else { $classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class))); } $classFile.= '.php'; //echo $classFile;die(); return include $classFile; } |
Quando noi leggiamo ad esempio Mage_Catalog_Block_Product_View l’autoloader effettua queste operazioni:
- sostituisce gli underscore _ in spazi bianchi;
- converte le prime lettere delle parole che sono precedute da uno spazio bianco in maiuscolo
- sostituisce gli spazi bianchi in /
- aggiunge infine l’estensione .php al nome
Quindi Mage_Catalog_Block_Product_View diventerà Mage/Catalog/Block/Product/View.php
Scrivi un commento