Wenn ich in Magento 1 den vollständigen Magento-Klassennamen in einer Factory-Methode verwende, kann ich ein Objekt instanziieren
//trying full class name instead of catalog/product
$object = Mage::getModel('Mage_Catalog_Model_Product');
Das Gleiche funktioniert jedoch nicht für Helfer. Wenn du es versuchst
Mage::helper('Mage_Core_Helper_Url');
Du erhältst
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}
Was ist los?
Antworten:
Aus rein codierender Sicht, wenn Sie sich die
getModelClassName
Methode ansehen (ein paar Aufrufe des Stacks vonMage::getModel
)Sie werden sehen, dass Magento, wenn
/
im Klassenalias kein Alias angezeigt wird, davon ausgeht, dass es sich um einen vollständigen Klassennamen handelt. Allerdings ist diegetHelperClassName
FunktionWenn Magento
/
im Klassenalias kein Alias sieht , wird davon ausgegangen, dass Sie die Kurzform von verwendenund fügt
data
am Ende des Alias ein a hinzu, damit die Klasse ordnungsgemäß (catalog/data
bisMage_Catalog_Model_Data
) aufgelöst wird.Dies ermöglicht den Kurzform-Helfern, macht es Magento jedoch unmöglich, den Unterschied zwischen einem Kurzform-Helfer-Alias und einem Langform-Klassennamen zu erkennen.
Das ultimative "Warum" davon ist wahrscheinlich schwer zu bestimmen - dass die vollständige Instanziierung von Klassennamen überhaupt so funktioniert, kann nur ein Nebeneffekt der Schutzcodierungspraktiken eines Entwicklers sein, die nicht mit dem Wunsch eines anderen Entwicklers nach jedem Modul kompatibel waren eine "Haupt" -Helferklasse. Es kann sich auch um einen einzelnen überarbeiteten Entwickler handeln, der unterwegs schnelle Entscheidungen trifft. Es gibt wahrscheinlich irgendwo eine Lektion in Projektmanagement und Systementwicklung.
quelle