2011-11-16 12 views
33

में मैं वर्तमान में CakePHP 2.0 के लिए हमारी परियोजनाओं में से एक उन्नयन कर रहा हूँ। दुर्भाग्यवश कोड की "पहली पंक्ति" समस्याएं बनाती है, और मुझे उस समस्या का हल नहीं मिल रहा है।लोड हो रहा है विक्रेता फ़ाइलें CakePHP 2.0

CakePHP 1.3 में मैं ठीक पहले AppController वर्ग परिभाषित हो जाता है एक App::import("Vendor", "facebook"); बयान था। संदर्भित फ़ाइल /app/vendors/facebook/facebook.php के अंतर्गत स्थित (और खुद base_facebook.php फ़ाइल भी शामिल है) है।

मैं फ़ाइल नामकरण और वर्ग लोड हो रहा है के अनुसार CakePHP 2.0 में अब फ़ाइल शामिल करने के लिए कई अलग अलग तरीकों की कोशिश की यहाँ वर्णित: File naming and class loading changes in CakePHP 2.0

मैं app/Vendor/Facebook/Facebook.php, या app/Vendor/Facebook/facebook.php के लिए पथ का नाम बदला, और करने की कोशिश की निम्न विधियों:

App::uses("Facebook", "Vendor/Facebook"); 
App::uses("Facebook", "Facebook"); 
App::uses("Facebook", "Vendor/Facebook/Facebook.php"); 
App::uses("Facebook", "Vendor"); 

अभी तक किसी को एक विक्रेता फ़ाइल को संदर्भित करने का रास्ता मिल गया है? आलसी लोड हो रहा है की वजह से तरीकों से ऊपर एक त्रुटि/चेतावनी आग नहीं है, इसलिए यह कष्टप्रद तरह का यह डिबग करने के लिए है ...

उत्तर

53

विक्रेताओं CakePHP में App::uses() का उपयोग कर लोड नहीं किया जा सकता है, इस वजह से CakePHP बाहरी पुस्तकालयों पालन करने की उम्मीद नहीं कर सकते फ़ोल्डर और फ़ाइल नामकरण के संबंध में समान मानकों। आप अभी भी फ्रेमवर्क के संस्करण 1.3 में किए गए App::import('Vendor', ...) का उपयोग कर सकते हैं।

अब, App::import() विक्रेताओं के लिए उपयोग कर रहा है, तो आप इसके बारे में सोचते हैं, एक तरह से मूर्खतापूर्ण है। यह require_once() के लिए सिर्फ एक महंगा, वर्बोज़ और बहुत मूर्खतापूर्ण रैपर है।

2.0 में, हम वास्तव में आवश्यकता होती है या उनके विक्रेता पुस्तकालयों के लिए require_once उपयोग करने के लिए लोगों को प्रोत्साहित करते हैं। आप App::path('Vendor') या सिर्फ APP . 'Vendor' . DS का उपयोग कर विक्रेता फ़ोल्डर का स्थान मिल सकता है।

+0

हाय जोस, त्वरित उत्तर के लिए THX के पुराने संस्करण में आयात() अनुप्रयोग की तरह एक ही करना चाहिए ::। require_once बस ठीक काम करता है - मैंने इसके बारे में सोचा नहीं था। फिर भी, पुराना ऐप :: आयात ("विक्रेता", ...) वाक्यविन्यास मेरे लिए काम नहीं करता है। –

+2

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

+4

तो ऐप :: आयात ("विक्रेता", "फेसबुक/फेसबुक") को आपके मामले में चाल चलनी चाहिए। – mark

0

केक प्रलेखन अनुप्रयोग :: उपयोग करता है() उपयोग करने का सुझाव including-files-with-app-import

हालांकि, यह भी कहा गया है यदि आप अनुप्रयोग :: आयात()

App::import('Vendor', 'phpQuery', array('file' => 'bariew/phpquery/phpQuery/phpQuery.php')); 
0

आप मान लें उपयोग करने के लिए एक गैर stanard प्लगइन है 'आर विक्रेता फ़ाइल /app/vendors/facebook/facebook.php स्थित है।

निम्न पंक्ति CakePHP

require_once(ROOT . DS . 'app' . DS .'Vendor' . DS . 'facebook' . DS . 'src' . DS . 'facebook.php'); 

$facebookApi = new facebook(); 
संबंधित मुद्दे