Magento 2: var / जनरेशन में इंटरसेप्टर फ़ाइल क्या हैं?


24

तो मैंने कुछ Interceptor.phpफाइलों पर गौर कियाvar/generation

मुझे पता है कि इस फ़ोल्डर में निम्न के लिए मक्खी पर निर्मित कक्षाएं शामिल हैं:

  • कारखाना
  • प्रॉक्सी
  • प्लगइन्स

मुझे लगता है कि इंटरसेप्टर फाइलें प्लगइन वाले लोगों से जुड़ी होती हैं, हालांकि कभी-कभी मुझे नहीं लगता कि वे फाइलें कैसे उत्पन्न होती हैं। उदाहरण के लिए मुझे मिल गया है, var/generation/Magento/Framework/App/Response/Http/Interceptor.phpलेकिन यह फाइल किसी भी मौजूदा वर्ग से मेल नहीं खाती है।

तो मैं एक अच्छी तरह से समझा वर्कफ़्लो के लिए देख रहा हूँ कि कैसे Interceptor.php फाइलें उत्पन्न होती हैं?

जवाबों:


32

इंटरसेप्टर कक्षाएं इंटरसेप्टर डिजाइन पैटर्न का कार्यान्वयन हैं । इंटरसेप्टर यह है कि कैसे 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- लेकिन हम पाठक के लिए एक अभ्यास के रूप में छोड़ देंगे।

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