समस्या अच्छी तरह से जानी जाती है: lib
कक्षाएं केवल ऑटोलैडर के माध्यम से लोड की जाती हैं, और हम उन्हें इसके अलावा नहीं बदल सकते हैं:
- उन्हें पूरी तरह से एक कोडपूल में कॉपी किया जाता है, जो कि पहले लिब की तुलना में जांचा जाता है।
- PSR-0 ऑटोलैडर को स्थापित करना , एक ऑटोलॉड क्लासमेट को निर्दिष्ट करना, और उसके बाद फ़ाइल को पूरी तरह से उस संरचना संरचना में कॉपी करना। [मेरा वर्तमान समाधान]
मैं एक कठिन स्थान पर हूं क्योंकि मैं इनमें से कई फाइलों को संभावित रूप से छूना चाहता हूं - लेकिन मेरी पवित्रता और दुकान के स्थायित्व / उन्नयन के लिए पूरे पुस्तकालय वर्गों को कॉपी नहीं करना चाहते हैं।
अब स्पष्ट रूप से इस समस्या के संभावित समाधान हैं, लेकिन वे सभी अपनी समस्याओं के सेट के साथ आते हैं:
- AOP मार्ग पर जाएं और Go जैसी PHP-आधारित लाइब्रेरी का उपयोग करें! AOP : पिछले मैंने जाँच की कि यह Magento वर्गों को संगीतकार ऑटोलैडर द्वारा लोड किए जाने की आवश्यकता होगी, न कि केवल एक उपलब्ध होने की। फ्लाइंगमैन ने इस क्षेत्र में कुछ काम किया है, लेकिन यह निश्चित रूप से उत्पादन के उपयोग के लिए तैयार नहीं है और मेरी जरूरत अधिक तत्काल है। मैं भी एक विस्तार के रूप में जहाज करना चाहता हूं, और इसके लिए अधिक संगीतकार सेटअप की आवश्यकता होगी।
- AOP मार्ग पर जाएं और एक मूल PHP एक्सटेंशन का उपयोग करें : संभवतः इस बिंदु पर सबसे अधिक अनुकूल है, लेकिन इसे एक अलग एक्सटेंशन स्थापित करने की आवश्यकता होगी, यह उल्लेख करने के लिए नहीं कि यह एचएचवीएम के साथ काम नहीं करेगा।
- PHP के classkit और / या runkit का उपयोग करें : यह एक और देशी PHP एक्सटेंशन है इसलिए इसमें ऊपर की तरह ही समस्या है।
- मेरे खुद के नामस्थान (
\Danslo\Varien_X
) संस्करण का उपयोग करने के लिए पैच कॉल साइटें , फिर मूल (\Varien_X
) से विस्तार करें : पैच करने के लिए बहुत अधिक कॉल करने के तरीके हैं और इसे फिर से लिखने की मूर्खतापूर्ण राशि की आवश्यकता होगी। कोई विकल्प नहीं। मेरा स्वयं का रोल करें: यह संभव होना चाहिए:
- मेरा अपना ऑटोलैडर लिखो।
- मूल वर्ग को एक अलग फ़ोल्डर (
{root_dir}/var/tmp
) में कॉपी करें , उसमें लपेटेंnamespace \Magento { < original contents > }
। - उस फाइल को शामिल करें।
- मेरी संशोधित कक्षा शामिल करें
OriginalClass extends Magento\OriginalClass {}
इसका नकारात्मक पक्ष स्पष्ट है: डायनामिक कोड जेनरेशन, रेगेक्स, फिर से लिखे गए वर्गों को लोड करने के लिए थोड़ा उपरि। लेकिन मुझे लगभग यकीन है कि इस बिंदु पर यह ~ 5000 लाइनों की कोडिंग को हरा देगा जब मैं सिर्फ ~ 100 लाइनों को स्पर्श / जोड़ना चाहता हूं।
मुझे पता है कि मैं बहुत कुछ पूछ रहा हूं, लेकिन क्या कुछ आधुनिक और अपेक्षाकृत साफ है जो इस समस्या को हल करने में मदद करता है?