फ़ोल्डर नाम cमें लोअरकेस क्यों है controllers? जबकि मॉडल, ब्लॉक और हेल्पर एक बड़े अक्षर के साथ शुरू हो रहे हैं?
फ़ोल्डर नाम cमें लोअरकेस क्यों है controllers? जबकि मॉडल, ब्लॉक और हेल्पर एक बड़े अक्षर के साथ शुरू हो रहे हैं?
जवाबों:
controllersफ़ोल्डर्स में स्थित कक्षाएं कक्षाओं की एक विशेष नस्ल हैं।
आप उन्हें उसी तरह से फिर से नहीं लिख सकते जब आप किसी मॉडल या <rewrite>टैग का उपयोग करके ब्लॉक को फिर से लिखते हैं config.xml, आप मॉडल ( Mage::getModel()) या सहायक ( Mage::helperया ब्लॉक) ( ) के साथ की तरह एक कारखाने का उपयोग करके उन्हें तुरंत नहीं कर सकते Mage::app()->getLayout()->createBlock()।
मेरा मतलब है Mage::getControllerInstance()कि लेकिन यह थोड़ा अलग है। इस पर और बाद में।
आप देख सकते हैं कि वे वास्तव में अन्य वर्गों के रूप में नामकरण नियम का पालन नहीं करते हैं। वर्ग नाम में
काम controllersनहीं मिला है।
चलो उदाहरण के लिए नियंत्रक मिला Mage/Catalog/controllers/CategoryController.php।
वर्ग का नाम है Mage_Catalog_CategoryController।
मैं आपको 100% निश्चित उत्तर नहीं दे सकता, केवल एक कोर देव ही ऐसा कर सकता है।
लेकिन मेरी धारणा यह है कि कोई नहीं चाहता था कि नियंत्रकों को ऑटोलॉज किया जाए।
इस विधि पर एक नज़र डालें Mage_Core_Controller_Varien_Router_Standard::match। यह बड़ा और डरावना है, लेकिन यह वह है जो एक यूआरएल को एक नियंत्रक और एक कार्रवाई में मैप करता है।
बहुत सारी गणनाएं की गई हैं लेकिन कहीं न कहीं यह रेखा है:
$controllerClassName = $this->_validateControllerClassName($realModule, $controller);
यदि हम गहराई से खोदते हैं तो _validateControllerClassNameआप getControllerFileNameइस तरह समाप्त हो जाएंगे :
public function getControllerFileName($realModule, $controller)
{
$parts = explode('_', $realModule);
$realModule = implode('_', array_splice($parts, 0, 2));
$file = Mage::getModuleDir('controllers', $realModule);
if (count($parts)) {
$file .= DS . implode(DS, $parts);
}
$file .= DS.uc_words($controller, DS).'Controller.php';
return $file;
}
और _includeControllerClassइसमें मूल रूप से ऐसा होता है include $controllerFileName;:।
controllersविधि में हार्ड कोड को getControllerFileNameनोटिस करें और ध्यान दें कि नियंत्रक फ़ाइल बस शामिल है। तो कोई ऑटोलॉडिंग नहीं।
अंत में, नियंत्रक कारखाना Mage::getControllerInstance()वर्ग का पता नहीं लगाता है और पुनर्लेखन में नहीं दिखता है। यह सिर्फ करता है return new $class($request, $response, $invokeArgs);जहां $classनियंत्रक वर्ग है।
साइड नोट : कुछ मॉड्यूल में एक फ़ोल्डर होता है जिसे Controller(कैपिटल सी के साथ) और मानक कक्षा के नामकरण का पालन करने के लिए कक्षाएं होती हैं। वे वर्ग वास्तव में नियंत्रक नहीं हैं। वे मॉड्यूल में या नियंत्रकों के रूप में अन्य नियंत्रकों के लिए मूल वर्गों के रूप में उपयोग किए जाते हैं।
साइड नोट 2 : यह Magento 2 में मौजूद नहीं है। सभी नियंत्रक Controllerफ़ोल्डर में स्थित हैं ।
मारियस आप इतने महान हैं: डी
मेरा जवाब बस होगा:
यह Zend फ्रेमवर्क मानक है: http://framework.zend.com/manual/1.12/en/zend.controller.quickartart.html
controllersऔर मुझे लगता है कि Mage कोर टीम एक zend फ्रेमवर्क विशेषज्ञ होगी। कुडोस। उस लिंक को साझा करने के लिए धन्यवाद