इंटरसेप्टर कक्षाएं इंटरसेप्टर डिजाइन पैटर्न का कार्यान्वयन हैं । इंटरसेप्टर यह है कि कैसे Magento 2 के ऑब्जेक्ट सिस्टम एक प्लगइन सिस्टम को लागू करता है ।
एक क्लाइंट डेवलपर के रूप में, सिद्धांत यह है कि आपको इंटरसेप्टर्स के बारे में चिंता करने की आवश्यकता नहीं है - आप ऑब्जेक्ट मैनेजर से एक्स के ऑब्जेक्ट के लिए पूछते हैं, और यह आपको वापस लौटा देता है। आपके द्वारा मांगी गई वस्तु इंटरसेप्टर हो सकती है या नहीं, लेकिन क्लाइंट प्रोग्रामर के दृष्टिकोण से यह गैर-इंटरसेप्टर संस्करण के समान व्यवहार करता है। ऑब्जेक्ट मैनेजर कार्यान्वयन विस्तार में इंटरसेप्टर को वापस करने या वापस करने का निर्णय कैसे लेता है।
उस कार्यान्वयन विवरण में रुचि रखने वाले लोगों के लिए - यदि कोई वर्ग, या उस वर्ग का कोई मूल वर्ग कॉन्फ़िगर किया गया है, तो ऑब्जेक्ट प्रबंधक एक इंटरसेप्टर लौटाता है। आप यहां डेवलपर मोड इंटरसेप्टर क्लास में देख सकते हैं
#File: vendor/magento/framework/Interception/ObjectManager/Config/Developer.php
public function getInstanceType($instanceName)
{
$type = parent::getInstanceType($instanceName);
if ($this->interceptionConfig && $this->interceptionConfig->hasPlugins($instanceName)
&& $this->interceptableValidator->validate($instanceName)
) {
return $type . '\\Interceptor';
}
return $type;
}
उत्पादन (यानी संकलित मोड) के लिए, Magento संकलन मोड के दौरान सिस्टम को पूर्व-स्कैन करता है, और नोट करता है कि किन वर्गों को प्लगइन्स की आवश्यकता है।
वास्तविक पीढ़ी के लिए, Magento इसे एक PHP ऑटोलैडर के साथ संभालती है। यदि कोई डेवलपर क्लास को नामांकित करता है (या अन्यथा एक क्लास नाम (एक प्रकार का संकेत, class_exists
क्लास आदि में) के साथ PHP ऑटोलॉड घटना को ट्रिगर करता है , और संगीतकार आधारित ऑटोलैडर को क्लास फाइल नहीं मिल सकती है, तो एक दूसरा पंजीकृत ऑटोलॉडेर
Magento\Framework\Code\Generator\Autoloader::load
शुरू हो रहा है। यह ऑटोलैडर
vendor/magento/framework/Code/Generator/Autoloader.php
वसीयत ( Magento\Framework\Code\Generator
कक्षा के माध्यम से ) कुछ नामकरण पैटर्न के लिए कक्षा के लिए स्कैन करता है। यदि वर्ग का नाम समाप्त होता है Interceptor
, तो Magento generateClass
इस कक्षा में विधि के माध्यम से एक इंटरसेप्टर का निर्माण करता है
vendor/magento/framework/Code/Generator.php
वहाँ से बाहर का पता लगाने के लिए अतिरिक्त कक्षाएं / ऑब्जेक्ट हैं Magento\Framework\Code\Generator
- लेकिन हम पाठक के लिए एक अभ्यास के रूप में छोड़ देंगे।