En Magento 1, si uso el nombre completo de la clase Magento en un método de fábrica, puedo crear una instancia de un objeto
//trying full class name instead of catalog/product
$object = Mage::getModel('Mage_Catalog_Model_Product');
Sin embargo, lo mismo no funcionará para los ayudantes. Si intentas
Mage::helper('Mage_Core_Helper_Url');
Usted obtiene
Warning: include(Mage/Mage/Core/Helper/Url/Helper/Data.php): failed to open stream: No such file or directory in /path/to/magentolib/Varien/Autoload.php on line 93
#0 /path/to/magentolib/Varien/Autoload.php(93): mageCoreErrorHandler(2, 'include(Mage/Ma...', '/path/to/magent...', 93, Array)
#1 /path/to/magentolib/Varien/Autoload.php(93): Varien_Autoload::autoload()
#2 [internal function]: Varien_Autoload->autoload('Mage_Mage_Core_...')
#3 /path/to/magentoapp/Mage.php(547): spl_autoload_call('Mage_Mage_Core_...')
#4 /path/to/magentoapp/code/local/Sebastianjuffar/Commercebug/controllers/IndexController.php(11): Mage::helper('Mage_Core_Helpe...')
#5 /path/to/magentoapp/code/core/Mage/Core/Controller/Varien/Action.php(418): Sebastianjuffar_Commercebug_IndexController->indexAction()
#6 /path/to/magentoapp/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('index')
#7 /path/to/magentoapp/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#8 /path/to/magentoapp/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#9 /path/to/magentoapp/Mage.php(684): Mage_Core_Model_App->run(Array)
#10 /path/to/magentoindex.php(87): Mage::run('', 'store')
#11 {main}
¿Que esta pasando?
Respuestas:
Desde una perspectiva puramente codificante, si observa el
getModelClassName
método (algunas llamadas desde la pilaMage::getModel
)verá que si Magento no ve un
/
alias de clase, se supone que es un nombre de clase completo. Sin embargo, si lagetHelperClassName
funciónSi Magento no ve un
/
alias de clase, se supone que está utilizando la forma abreviada dey agrega un
data
al final del alias para que la clase se resuelva correctamente (catalog/data
aMage_Catalog_Model_Data
).Esto habilita los ayudantes de forma corta, pero hace que sea imposible para Magento distinguir entre un alias de ayuda de forma corta y un nombre de clase de forma larga.
El "por qué" definitivo de esto es probablemente difícil de precisar: que la creación de instancias de nombre de clase completo funcione así puede ser solo un efecto secundario de las prácticas de codificación protectora de un desarrollador que eran incompatibles con el deseo de otro desarrollador de que cada módulo tenga una clase auxiliar "principal". También podría ser un único desarrollador con exceso de trabajo que tome decisiones rápidas sobre la marcha. Probablemente haya una lección sobre gestión de proyectos y desarrollo de sistemas en algún lugar.
fuente