मैं वर्तमान में एक ऐसे मॉड्यूल पर काम कर रहा हूं जिसके लिए एक तृतीय-पक्ष PHP पुस्तकालय की आवश्यकता है, जो अनिवार्य रूप से एक एकल PHP वर्ग है। आम तौर पर, मैं इसे / उपनिर्देशिका में शामिल करूंगा और जोड़ूंगा
files[] = includes/Foo.php
मेरे .info फ़ाइल के लिए और Drupal 7 क्लास ऑटो लोडर को अपनी बात करने दें जब मैं ऐसा करता हूं $foo = new Foo()
।
हालांकि, मेरे पास इस मॉड्यूल को जनता के लिए जारी करने की अनुमति है, और इसमें लाइब्रेरी को मॉड्यूल के साथ शामिल नहीं किया जाएगा। मैं लाइसेंस के बारे में जटिलताओं के बारे में अच्छी तरह से जानता हूं, लेकिन इस सवाल के लिए, मैं इसे अनदेखा करना चाहूंगा।
एक समान प्रश्न है, मैं एक PHP पुस्तकालय कैसे शामिल करूं? , लेकिन मुझे नहीं लगता कि यह वास्तव में मेरे डिमेमा का जवाब देता है।
इस सवाल का यह उत्तर अनिवार्य रूप से लाइब्रेरीज़ एपीआई का उपयोग करने के लिए कहता है , लेकिन हर एक मॉड्यूल जो मैंने पाया है कि इसका उपयोग बस libraries_get_path()
बेसिपथ प्राप्त करने के लिए करता है (और जब यह उपलब्ध नहीं है तो फॉलबैक पथ शामिल है) और फिर कुछ के साथ require
या एक करता है include
त्रुटि जाँच (या नहीं)। सभी कुछ ऐसा करते हैं:
if (!class_exists('Foo')) {
$path = function_exists('libraries_get_path') ?
libraries_get_path('foo') : 'sites/all/libraries/foo';
if (!include($path . '/Foo.php')) {
// handle this error
}
}
इस स्थिति में, लायब्रेरी API वास्तव में कुछ भी नहीं कर रहा है। मैं इसका उपयोग करने का लाभ नहीं देखता, उपयोगकर्ताओं को कॉपी डाउनलोड करने और मॉड्यूल फ़ोल्डर में रखने के लिए कहने की पुरानी पद्धति पर। और, अभी भी समस्या है कि मॉड्यूल डेवलपर को अभी भी मैन्युअल रूप से include
/ के साथ लोड करने की आवश्यकता है require
। उदाहरण के लिए, फेसबुक मॉड्यूल सिर्फ लाइब्रेरी को एक में लोड करता है hook_init
और HTML प्यूरिफायर मॉड्यूल में लाइब्रेरी की जरूरत होने पर हर बार चेक-एंड-लोड करने के लिए एक आंतरिक फ़ंक्शन होता है।
यह एक व्यापक अभ्यास हो सकता है , लेकिन यह एक सर्वोत्तम अभ्यास नहीं लगता है ।
क्या मेरे मॉड्यूल को पहल करनी चाहिए और hook_libraries_info
मुझे घोषित करना चाहिए कि मैं क्या उपयोग कर सकता हूं libraries_load('foo')
? यह भी अजीब लगता है।
if (libraries_load($name)) {..}
लाइब्रेरी मौजूद न होने की स्थिति में WSOD से बचना एक उद्देश्य है।