2013-08-05 10 views
10

मुझे समस्या का समाधान करने के लिए पूरी तरह से अनुमानित लेकिन अविश्वसनीय रूप से कष्टप्रद और कठिन सामना करना पड़ रहा है।वर्डप्रेस प्लगइन विकास में संगीतकार नामस्थान टकराव

मैं वर्डप्रेस प्लगइन विकसित करने के लिए एक PHP ढांचे पर काम कर रहा हूं। यह निर्भरता प्रबंधन के लिए संगीतकार का उपयोग कर रहा है। बेशक, समस्या यह है कि यदि आपके पास वर्डप्रेस की एक ही स्थापना में मेरे ढांचे के दो उदाहरण हैं, तो आपके पास दो विक्रेता फ़ोल्डर्स हैं, और फ्रेमवर्क द्वारा आवश्यक किसी भी पैकेज की दो प्रतियां हैं। जो एक त्रुटि की ओर जाता है।

ढांचा एक अलग प्लगइन के रूप में कार्य करता है जिसे उसके बाद बनाए गए किसी भी ऐप/प्लगइन्स द्वारा विरासत में प्राप्त किया जाता है।

विक्रेता फ़ोल्डर को मूल रूपरेखा फ़ोल्डर में ले जाएं?

समस्याएं: मुझे नहीं पता कि क्या होगा यदि मेरे पास दो कंपोज़र.जेसन फाइलें और दो कंपोज़र.फार फ़ाइलें एक ही विक्रेता फ़ोल्डर में लिख रही हैं और उसी ऑटोलोडर का उपयोग कर रही हैं। संभवतः यह अच्छा नहीं होगा। इसके अलावा, यह कंपोज़र पैकेज के साथ टकराव की समस्या का समाधान नहीं करता है जिसे मैं किसी भी अन्य स्क्रिप्ट या प्लगइन द्वारा इस्तेमाल किया जा सकता हूं, जिसे मैं संभालने की कोशिश कर रहा हूं।

तो मैं अटक गया हूं। क्या यह एक समस्या है जिसे हल किया जा सकता है, या यह सिर्फ PHP में अंतर्निहित है?

+0

आप पहली बार दो विक्रेताओं को _need_ क्यों करेंगे? मुख्य 'विक्रेता' फ़ोल्डर की बस 'composer.json' फ़ाइल को संपादित करें, एक निर्भरता जोड़ें जो आपको चाहिए, एक-एक करके। Composer.lock फ़ाइल को हटाएं, और फिर 'php composer.phar install' चलाएं। ऑटोलोडर अपडेट किया जाएगा, और सभी निर्भरताओं को मुख्य विक्रेता निर्देशिका में जोड़ा जाएगा। नाम टकराव के मामले में, यदि आवश्यक हो, तो उपसर्ग का उपयोग करें, या फ़ाइलों को मैन्युअल रूप से बदलें संपादित करें। आपको केवल उन निर्भरताओं की प्रतिलिपि बनाना होगा जिनके पास एक रेपो उपलब्ध नहीं है (यानी आपकी अपनी निर्भरता) –

+1

@jdp: संगीतकार के लिए वर्डप्रेस-प्लगइन इंस्टॉलर का उपयोग क्यों न करें? आपके पास न केवल केंद्रीय विक्रेता फ़ोल्डर है, आप संगीतकार के साथ प्लगइन स्थापित करने का भी प्रबंधन करते हैं। यदि आप केवल उप-आधारभूत संरचना के रूप में संगीतकार का उपयोग करते हैं, तो यह अच्छी तरह से काम नहीं करता है। तो कम से कम कस्टम इंस्टॉलर की तलाश करें: https://github.com/composer/installers - http://hakre.wordpress.com/2013/08/03/your-guide-to-composer-in-wordpress/ - - http://composer.rarst.net/ --- और यदि आप वर्डप्रेस स्टैकएक्सचेंज * लूप * चैट में शामिल हो जाते हैं, तो आप रारस्ट से मिल सकते हैं कि विषय के बारे में बहुत कुछ कैसे पता है। – hakre

उत्तर

0

मैं संगीतकार या प्लगइन ढांचे का उपयोग कर रहे के साथ बहुत परिचित नहीं हूँ, लेकिन सामान्य रूप में - परहेज समारोह/वर्डप्रेस plugins में वर्ग के नाम टकराव निम्नलिखित तरीके से किया जाता है:

  • कि यह मानते हुए अपने प्लगइन (जैसे MyCoolPlugin) ऑब्जेक्ट उन्मुख लिखा गया है, उदाहरण के लिए MyCoolPlugin नामक एक वर्ग के रूप में, आप MyCoolPlugin के उप-वर्ग के रूप में सहायक वर्ग/लाइब्रेरी को शामिल कर सकते हैं।

  • class_exists(), यह कक्षा को परिभाषित करने के लिए PHP का तरीका है।

class MyHelperClass{ }

आप अपने प्लग-इन में से प्रत्येक में वर्ग घोषित करने से पहले निम्न जांच का उपयोग हो सकता है:: अपने सहायक वर्ग निम्नलिखित मान लिया जाये कि

if(!class_exists('MyHelperClass')){ 
    class MyHelperClass{ 
    } 
} 
बेशक

, वहाँ एक व्यापार में है यहां से, क्योंकि कक्षा का केवल पहला उदाहरण वर्डप्रेस के माध्यम से उपयोग किया जाएगा। जैसे यदि आपके पास सहायक वर्ग के दो अलग-अलग संस्करणों के साथ दो प्लगइन्स हैं - उनमें से केवल एक ही सक्रिय और किसी भी पल में उपलब्ध होगा।

  • एक वैश्विक चर - उदा। सहायक फ़ाइल में define('MY_HELPER_IS_LOADED', true); (यदि आप उन्हें include() या require() के माध्यम से शामिल कर रहे हैं)। फिर प्रत्येक शामिल सहायक फ़ाइल की शुरुआत में if(defined('MY_HELPER_IS_LOADED')) return; के साथ चेक करें, जो वर्तमान में अनुरोधित फ़ाइल को शामिल/शामिल करने की आवश्यकता नहीं होगी।

फिर से ऊपर की रणनीति सामान्य रूप से PHP में उपयोग की जाती है, मुझे यकीन नहीं है कि आपका प्लगइन ढांचा बिल्कुल कैसे स्थापित किया गया है।

6

संगीतकार वास्तव में एक ही प्रोजेक्ट में कई बार उपयोग नहीं किया जाना है। दूसरी तरफ इसके साथ कुछ भी गलत नहीं है, हालांकि आप इसकी निर्भरता सुविधाओं को खो देते हैं और वर्डप्रेस पर्यावरण में निर्भरताओं के सामान्य मामले की तरह इसका इलाज करने की आवश्यकता है।

दूसरे शब्दों में - यदि आप निर्भरता नहीं कर रहे हैं संगीतकार तरीका और वर्डप्रेस निर्भरता नहीं कर रहा है, तो यह आपकी निजी समस्या है कि इससे कैसे निपटें।

मैं नहीं जानता कि अगर मैं दो composer.json फ़ाइलें और एक ही विक्रेता फ़ोल्डर में लिखते हैं और एक ही autoloader

मैं निम्नलिखित नहीं कर रहा हूँ क्यों प्रयोग करते हुए दो composer.phar फ़ाइलें क्या होगा यदि आप एकाधिक संगीतकार इंस्टॉल का उपयोग कर रहे हैं तो विक्रेता फ़ोल्डर समान होगा ... क्या आप विस्तारित कर सकते हैं कि आप इसे कैसे बनाते हैं और क्या इसका मतलब सार्वजनिक या निजी उपयोग के लिए है?

+0

हाँ। जो चीज मैं बना रहा हूं वह अन्य प्लगइन द्वारा बढ़ाया गया है। वे बच्चे प्लगइन्स कंपोज़र को अपनी परियोजनाओं में लागू कर सकते हैं। तो अगर दोनों बच्चे प्लगइन्स दोनों शामिल थे, कहते हैं, टवीग, यह तोड़ देगा। मैं जोर से सोच रहा था कि अगर यह दोनों प्लगइन्स एक ही विक्रेता फ़ोल्डर का इस्तेमाल करते हैं और उनकी निर्भरताओं की सूची को एकत्रित करते हैं तो यह काम करेगा। – jdp

+0

वही विक्रेता फ़ोल्डर का उपयोग करना स्पष्ट रूप से खराब विचार है, फ़ाइल पेड़ मेल नहीं खाएंगे, ऑटोलोडर गलत चीजें स्कैन करेंगे, आदि। सामान्य संगीतकार स्थापित करने के साथ ऑटोलोडर शायद ढेर होंगे और जल्द से जल्द "जीत" और टकराव कक्षाओं की सेवा करेंगे, हालांकि किसी भी गैर-नामित कार्य घातक होंगे सामान्य रूप से त्रुटि क्योंकि वे PHP उनके लिए स्वत: लोड नहीं करते हैं। उपरोक्त के रूप में - आपका एकमात्र विकल्प आपके स्वयं के चेक और आपके त्रुटि-प्रमाणन तर्क कर रहा है। – Rarst

संबंधित मुद्दे