Magento's Factory Methods में फुल क्लास के नाम


11

Magento 1 में, यदि मैं किसी फ़ैक्टरी विधि में पूर्ण Magento वर्ग नाम का उपयोग करता हूं, तो मैं किसी वस्तु को तुरंत देख पा रहा हूं

//trying full class name instead of catalog/product
$object = Mage::getModel('Mage_Catalog_Model_Product');

हालाँकि, एक ही चीज़ सहायकों के लिए काम नहीं करेगी। अगर तुम कोशिश करो

Mage::helper('Mage_Core_Helper_Url');

आपको मिला

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}

क्या चल रहा है?


2
आप ट्विटर से यह नहीं मिला? :)
मेरियस

1
@ आप मुझे हरा सकते हैं। ट्विटर-सवाल-के रूप में एक सेवा।
२14

@ मार्स हाँ - मैं ट्विटर पर आने वाले सवालों को प्रोत्साहित करने के बजाय यहाँ आने के लिए कोशिश कर रहा हूँ।
एलन स्टॉर्म

जवाबों:


8

विशुद्ध रूप से कोडिंग के नजरिए से, यदि आप getModelClassNameविधि पर एक नज़र डालते हैं (कुछ स्टैक नीचे से कॉल करते हैं Mage::getModel)

public function getModelClassName($modelClass)
{
    $modelClass = trim($modelClass);
    if (strpos($modelClass, '/')===false) {
        return $modelClass;
    }
    return $this->getGroupedClassName('model', $modelClass);
}

आप देखेंगे कि अगर Magento /क्लास के उपनाम में नहीं दिखता है , तो यह मानता है कि यह एक पूर्ण वर्ग का नाम है। हालांकि, अगर getHelperClassNameफ़ंक्शन

public function getHelperClassName($helperName)
{
    if (strpos($helperName, '/') === false) {
        $helperName .= '/data';
    }
    return $this->getGroupedClassName('helper', $helperName);
}

अगर Magento /क्लास के उपनाम में नहीं दिखता है , तो यह मानता है कि आप शॉर्ट फॉर्म का उपयोग कर रहे हैं

Mage::helper('catalog')

और एक कहते हैं dataउर्फ के अंत तो वर्ग का निराकरण ठीक से (करने catalog/dataके लिए Mage_Catalog_Model_Data)।

यह शॉर्ट फॉर्म हेल्पर्स को सक्षम बनाता है, लेकिन मैगेंटो के लिए शॉर्ट फॉर्म हेल्पर उर्फ ​​और एक लंबे समय के क्लास के नाम के बीच का अंतर बताना असंभव बनाता है।

इसका अंतिम "क्यों" शायद पिन करने के लिए कठिन है - कि पूरी कक्षा का नाम तात्कालिकता इस तरह काम करती है कि एक डेवलपर से सुरक्षात्मक कोडिंग प्रथाओं का केवल एक साइड इफेक्ट हो सकता है जो प्रत्येक मॉड्यूल के लिए किसी अन्य डेवलपर की इच्छा के साथ असंगत थे एक "मुख्य" सहायक वर्ग। जैसा कि वे जाते हैं, यह त्वरित निर्णय लेने वाला एकल ओवरवर्क डेवलपर भी हो सकता है। परियोजना प्रबंधन और सिस्टम के विकास में शायद कहीं न कहीं सबक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.