Yii

2010-10-26 13 views
7

में किसी अन्य नियंत्रक में कॉल फ़ंक्शन मैंने अपने वाईआई अनुप्रयोग में 2 नियंत्रक बनाए हैं: डिफ़ॉल्ट नियंत्रक पथ में FirstController.php और SecondController.php।Yii

FirstController.php:

<?php 
class FirstController extends Controller { 
    public static function returnFunc() { return 'OK'; } 
} 

SecondController.php:

YiiBase::include(FirstController.php) [<a href='function.YiiBase-include'>function.YiiBase-include</a>]: failed to open stream: No such file or directory 

FirstController::returnFunc() इसी तरह कॉलिंग:

<?php 
class SecondController extends Controller { 
    public function exampleFunc() { 
    $var = First::returnFunc(); 
    } 
} 

जब मैं SecondController में exampleFunc() निष्पादित करने के लिए प्रयास करते हैं, Yii त्रुटि फेंक काम नहीं करते।

मैं ओओपी और वाईआई ढांचे में नया हूं। समस्या क्या है?

+0

http://www.yiiframework.com/forum/index.php/topic/6471-call-another-controllers-action/#entry200141 –

उत्तर

11

मैंने इस समस्या को हल किया है। ऑटोलोडर नियंत्रकों को लोड नहीं करता है।

यह config/main.php में था:

'import' => array(
    'application.models.*', 
    'application.components.*', 
), 

इस के साथ सभी काम:

'import' => array(
    'application.models.*', 
    'application.components.*', 
    'application.controllers.*', 
), 
+8

नियंत्रकों भर में स्थिर कार्यों को साझा करने के विचार _in_ एक नियंत्रक बुराई है । यही घटक हैं। – pestaa

+1

हां, मैं एक घटक का उपयोग करता हूं, या दोनों नियंत्रक एक बेस क्लास का विस्तार करते हैं जिसमें वह कार्य होता है जिसे आप दोनों कॉल करना चाहते हैं। आप इस कार्य को व्यवहार के साथ भी संलग्न कर सकते हैं: http://www.yiiframework.com/doc/guide/1.1/en/basics.component#component-behavior – thaddeusmt

+0

क्या आप कृपया मुझे बता सकते हैं कि आप किस कोडिनेटर का उपयोग कर रहे हैं? –

2

जब आप एक Yii परियोजना बनाते हैं तो आपके नियंत्रक के प्रत्येक नियंत्रक वर्ग का विस्तार, और उस वर्ग का निर्माण किया फैली वाईआई कक्षा CController में।

यह अच्छा है क्योंकि नियंत्रक आपके आवेदन के भीतर एक कक्षा है (यह घटक फ़ोल्डर में पाया जा सकता है)।

यदि आप अपने दोनों नियंत्रकों द्वारा सुलभ होने की विधि चाहते हैं, तो उस विधि को नियंत्रक वर्ग में रखें, और चूंकि वे दोनों इसका विस्तार करते हैं। वे दोनों का उपयोग होगा। बस इसे सार्वजनिक या संरक्षित घोषित करना सुनिश्चित करें।

+0

हां, मुझे लगता है कि यह या एक बदलाव (इस फ़ंक्शन के साथ एक और नियंत्रक वर्ग बनाना, और उसमें विस्तार करना) जाने का तरीका है। साथ ही, फ़ंक्शन को जोड़कर, आपको जो भी चाहिए, वह व्यवहार कर सकता है: हां, मैं एक घटक का उपयोग करता हूं, या दोनों नियंत्रक एक बेस क्लास का विस्तार करते हैं जिसमें वह फ़ंक्शन होता है जिसे आप दोनों कॉल करना चाहते हैं। आप इस कार्य को व्यवहार के साथ भी संलग्न कर सकते हैं: http://www.yiiframework.com/doc/guide/1.1/en/basics.component#component-behavior – thaddeusmt

4
class ServiceController extends Controller 
{ 
    public function actionIndex() 
    { 
     Yii::import('application.controllers.back.ConsolidateController'); // ConsolidateController is another controller in back controller folder 
     echo ConsolidateController::test(); // test is action in ConsolidateController 



class ServiceController extends Controller 
{ 
    public function actionIndex() 
    { 
    Yii::import('application.controllers.back.CservicesController'); 
    $obj =new CservicesController(); // preparing object 
    echo $obj->test(); exit; // calling method of CservicesController 
+3

मुझे निम्नलिखित त्रुटि मिलती है 'CController :: __ निर्माण के लिए गुम तर्क 1(), जिसे 'में बुलाया गया है – shorif2000