2012-02-04 9 views
5

में घटकों का उपयोग करके मैं अपने आवेदन के लिए केकफ़्फ़ खोल का उपयोग करके एक कार्य को लागू करने की कोशिश कर रहा हूं। कार्य में एक लंबी चल रही प्रक्रिया (इसलिए खोल का उपयोग करने की आवश्यकता) चलाना शामिल है।केकफ़्प 2+ शैल

समारोह मुझे एक घटक CommonComponent

कहा जाता है के अंदर एक समारोह का उपयोग करने की आवश्यकता है दुर्भाग्य से जब भी मैं घटक मैं निम्न त्रुटि पीएचपी गंभीर त्रुटि प्राप्त शामिल करने के लिए प्रयास करें: क्लास 'घटक'/var/www में नहीं मिला /nginx-test/app/Controller/Component/CommonComponent.php

यहाँ CronShell कक्षा जो

class CronShell extends AppShell { 
    public function main() { 
     $this->out('Hello world.');  
// $this->out(phpinfo()); 
    } 
    public function test() 
    { 
     $this->out('Before Import'); 
     App::import('Component', 'Common'); 
     $this->out('Import complete'); 
     // $this->Common=ClassRegistry::init('CommonComponent'); 
     $this->Common =new CommonComponent(); 
     $this->out('Initialization complete'); 
     $this->Common->testCron(); 
     $this->out('FunctionCall complete'); 
     //$this->Common->saveCacheEntry("name","value"); 
    } 
    } 

बुलाया जा रहा है CommonComponent वर्ग एप्लिकेशन/नियंत्रक/Compon के रूप में जमा किया जाता है ent/CommonComponent.php और निम्नानुसार है

class CommonComponent extends Component 
{ 
function testCron() 
    {  
    $this->out('Hello world from Component.'); 
    } 
} 

कोई विचार?

+0

स्वीकृत उत्तर को अपडेट करने पर विचार करें? –

उत्तर

0

क्या अगर आपकी ऐप्लिकेशन लिब के भीतर से शैल में आयात कोड होना चाहिए

घटक भी लिब कोड का उपयोग कर सकते हैं - लेकिन आप थकाऊ सामान अगर आप सेट का भार करने की ज़रूरत नहीं करेंगे यह ठीक है आप ऐप क्लीनर

यदि आप घटक आयात करते हैं तो आपको इसे एक घटक संग्रह पास करने की आवश्यकता होगी और इसलिए आपको इसे बुद्धिमान खोल से बनाना होगा कि आप इसका उपयोग न करें (या यदि आप क्या आपको यह गलत करना होगा)

+0

lib फ़ोल्डर के अंदर घटक से सामान्य कोड को ले जाने के लिए काम किया गया। मैं अभी भी उलझन में हूं कि किस कोड को libs का हिस्सा बनना चाहिए और घटक –

+0

@Zulubaba का कौन सा कोड होना चाहिए, क्या आपके पास चिपकने के लिए कुछ कोड है bin.cakephp.org या कहीं और बिन पेस्ट करें। मैं आपकी भ्रम की सराहना कर सकता हूं लेकिन यह कहने के अलावा मार्क स्टोरी की संपत्ति संपीड़न के अलावा अन्य कोड को देखने के साथ विस्तारित नहीं कर सकता है।संपत्ति संपीड़न शैल और सहायक दोनों का उपयोग करता है, जो दोनों स्रोत वर्गों को लिब के साथ (प्लगइन के लिए विशिष्ट अतिरिक्त कॉन्फ़िगरेशन दिशानिर्देश दोनों द्वारा उपयोग किया जाता है) मुझे आपके बारे में अधिक जानकारी चाहिए और वहां से सुझाव दिया जा सकता है – sam

0

क्या आपने अपनी फ़ाइल के शीर्ष पर App::uses('Component', 'Controller'); को आजमाया है, ev। CommonComponent के आयात से पहले? तो मुझे लगता है कि आपको सैम कहने की ज़रूरत है, या आप $this->Controller->Components->load('CommonComponent') का उपयोग कर सकते हैं लेकिन इसके लिए आपको कंट्रोलर क्लास बनाने की आवश्यकता है।

15

मुझे हाल ही में एमटीर्क घटक के साथ लिखा था। मेरा अंतिम समाधान एक घटक के बजाय lib का उपयोग कर रहा था। तब मेरे पास घटक का उपयोग lib था ताकि मैं दोनों घटक और खोल से विधियों का उपयोग कर सकूं।

हालांकि, यहां कोड है जो आपको एक खोल से घटक लोड करने की अनुमति देगा।

<?php 
App::uses('AppShell', 'Console/Command'); 
App::uses('ComponentCollection', 'Controller'); 
App::uses('Controller', 'Controller'); 
App::uses('MTurkComponent', 'Controller/Component'); 

class ProcessCompletedTask extends Shell { 
    public function execute() { 
     $this->out("Processing...\n"); 
     $collection = new ComponentCollection(); 
     $this->MTurk = new MTurkComponent($collection); 
     $controller = new Controller(); 
     $this->MTurk->initialize($controller); 

     $this->MTurk->processHITs(); 
     $this->out("Complete\n"); 
    } 
} 
+0

यह काम करता है, लेकिन मैं था $ नियंत्रक शून्य के बारे में एक चेतावनी हो रही है। इस चेतावनी को ठीक करने के लिए 'ऐप :: उपयोग (' नियंत्रक ',' नियंत्रक ') जोड़ें और '$ नियंत्रक = नया नियंत्रक()' – Eldelshell

+0

@Ubersoldat संशोधित करें केक का कौन सा संस्करण आप उपयोग कर रहे हैं? मुझे लगता है कि मैंने 2.0 –

+0

के लिए इस पल में नवीनतम लिखा है: 2.4 – Eldelshell

0

मेरा मानना ​​है कि यह नियंत्रकों और गोले के बीच कार्यक्षमता साझा करने के लिए अर्थात् गलत है।

यदि आपको सामान्य कार्यक्षमता की आवश्यकता है, तो यह एक अलग वर्ग में रखने के लिए स्पष्ट और साफ है, इस वर्ग को अपने विक्रेताओं फ़ोल्डर में रखें और फिर नियंत्रक और खोल दोनों में कोड आयात करें।

इसके अतिरिक्त, यह दृष्टिकोण आपको कोर कार्यक्षमता का उपयोग करने वाले घटकों और कार्यों को बनाने से नहीं रोकता है और फिर इन घटकों और कार्यों को आपके नियंत्रकों और गोले के बीच साझा करता है।