फ़ोल्डर नाम 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 फ्रेमवर्क विशेषज्ञ होगी। कुडोस। उस लिंक को साझा करने के लिए धन्यवाद