No Magento 1, se eu usar o nome completo da classe Magento em um método de fábrica, sou capaz de instanciar um objeto
//trying full class name instead of catalog/product
$object = Mage::getModel('Mage_Catalog_Model_Product');
No entanto, a mesma coisa não funcionará para ajudantes. Se você tentar
Mage::helper('Mage_Core_Helper_Url');
Você recebe
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}
O que está acontecendo?
Respostas:
De uma perspectiva puramente de codificação, se você der uma olhada no
getModelClassName
método (algumas chamadas da pilhaMage::getModel
)você verá que, se o Magento não vê um
/
no alias da classe, ele assume que é um nome completo da classe. No entanto, se agetHelperClassName
funçãoSe o Magento não vir um
/
alias na classe, ele assumirá que você está usando a forma abreviada dee adiciona
data
a ao final do alias para que a classe resolva corretamente (catalog/data
paraMage_Catalog_Model_Data
).Isso permite que os auxiliares de formato curto, mas torna impossível para o Magento diferenciar um alias de auxiliar de formato curto e um nome de classe de formato longo.
O "porquê" final disso provavelmente é difícil de definir - que a instanciação completa do nome da classe funciona dessa maneira pode ser apenas um efeito colateral das práticas de codificação de proteção de um desenvolvedor que eram incompatíveis com o desejo de outro módulo de que cada módulo tivesse uma classe auxiliar "principal". Também pode ser um desenvolvedor com excesso de trabalho que toma decisões rápidas à medida que avançam. Provavelmente há lição em gerenciamento de projetos e desenvolvimento de sistemas em algum lugar.
fonte