Magento 2 में, जब आप "चारों ओर" प्लगइन बनाते हैं
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
आप पास के आस-पास अगले प्लगइन के लिए आगे बढ़ सकते हैं , कॉल कर सकते हैं, वास्तविक मूल विधि को कॉल कर सकते हैं , कॉल कर सकते हैं / पारित $proceed
विधि को लागू कर सकते हैं । यह एक सामान्य डिजाइन पैटर्न है, जिसे अक्सर PHP फ्रेमवर्क मिडलवेयर कार्यान्वयन में देखा जाता है।
हालाँकि - यह कार्यान्वयन विवरणों के लिए कुछ भ्रम w / r / t प्रस्तुत करता है। विशेष रूप से
यदि,
aroundPlugin
किसी ऑब्जेक्ट के अलावा , किसी ऑब्जेक्ट / क्लास में एकbefore
याafter
प्लगइन परिभाषित है, तो वे चारों ओर प्लग की श्रृंखला के संबंध में कब आग लगाते हैं?
अर्थात सभी तरीकों से पहले आग लग जाएगी किसी भी चारों ओर प्लगइन तरीकों से आग? या प्लग इन से पहले इच्छा ही अंतिम, वास्तविक से पहले आग वास्तविक विधि आग?
विशिष्ट समस्या जिसे मैं नीचे ट्रैक करने की कोशिश कर रहा हूं, मैं मैगेंटो 2 फ्रंट कंट्रोलर के लिए एक प्लगइन प्राप्त करने के लिए प्रतीत नहीं कर सकता जब मैगेंटो पूरे पृष्ठ कैशिंग मोड में है । पूरा पेज कैश एक प्लगइन द्वारा संचालित होता है जो कॉल नहीं करता है$proceed($response)
। मैंने इन प्लगइन्स के आस-पास के कुछ कोड में खुदाई करने की कोशिश की है और सिस्टम को बिना कारण पता करना मुश्किल पाया है कि यह कैसे काम करता है।
अर्थात - देव डॉक्स पृष्ठ पर विवरण इस एक विशिष्ट उदाहरण में, गलत होने के लिए प्रकट होता है। यदि दस्तावेज गलत है, या यह हाल ही में शुरू किया गया बग है, यदि यह एक किनारे का मामला है, या यदि मेरा प्लगइन कॉन्फ़िगरेशन गलत है, तो यह स्पष्ट नहीं है।
क्या किसी को पता है, प्रत्यक्ष अवलोकन से, या सांस्कृतिक ज्ञान से, यह प्राथमिकता कैसे काम करने वाली है?
\closure $proceed
बनाम का उपयोग करने के लिए अंगूठे का एक नियम है\callable $proceed
? आधिकारिक दस्तावेज़ केवल उल्लेख है\callable
और पर कभी नहीं छू लेती है\closure
।