2013-01-04 14 views
5
class SomeController extends Controller 
{ 

     public function actionIndex() { 
       echo 'This is some controller'; 
     } 
} 


class AnotherController extends SomeController 
{ 

     public function actionIndex() { 
       echo 'This is another controller'; 
     } 
} 

यह काम करता है:Yii - कस्टम नियंत्रक कक्षा से इनहेरिट - नहीं मिला

index.php?r=some 

लेकिन ...

index.php?r=another 

का कहना है:

पीएचपी चेतावनी

में शामिल हैं (SomeController.php): स्ट्रीम को खोलने में विफल: ऐसा कोई फ़ाइल या निर्देशिका

फ़ाइलों के

दोनों

test\protected\controllers\ 
BTW अतीत मैं भी जीआईआई नियंत्रक जेनरेटर के साथ उपयोग करने की कोशिश में

में हैं आधार वर्ग के रूप में "SomeController" ...

यह कहा:

The controller has been generated successfully. You may try it now. 

Generating code using template 
"C:\xampp\htdocs\yii\framework\gii\generators\controller\templates\default"... 
generated controllers\YetAnotherController.php 
generated views\yetAnother\index.php 
done! 

जब मैं पर क्लिक किया कि यह "यह अब कोशिश" यह भी कहा:

पीएचपी चेतावनी

में शामिल हैं (SomeController.php): स्ट्रीम को खोलने में विफल: ऐसा कोई फ़ाइल या निर्देशिका

उत्तर

11

संपादित करें:

अंदर क्लासेस संरक्षित/नियंत्रक स्वत: लोड नहीं किए गए हैं, इसलिए आपको इसे विस्तारित करने से पहले मूल श्रेणी फ़ाइल आयात करना होगा:

में AnotherController.php:

Yii::import('application.controllers.SomeController'); 
public class AnotherController extends SomeController { 
    // ... 
} 

बैठाना आप भी यूआरएल से आधार वर्ग का उपयोग करने की जरूरत है, आप ऊपर विधि का उपयोग कर सकते हैं। अन्यथा आप अपनी बेस क्लास संरक्षित/घटकों के अंदर रख सकते हैं जैसा कि आपने पहले ही पता लगाया है।


वाईआई ऑटोलोडिंग केवल तभी काम करता है जब फ़ाइल में फ़ाइल के समान फ़ाइल के समान नाम होता है। मतलब class SomeControllerकुछ कंट्रोलर.पीपी फ़ाइल के भीतर होना चाहिए।

उन परिवर्तनों को करें और इसे काम करना चाहिए।

सहायक सहायक विकी: Understanding Autoloading Helper Classes and Helper functions

Guide link:

कक्षा फ़ाइलें सार्वजनिक वर्ग उनमें शामिल के नाम पर रखा जाना चाहिए।

+0

हाँ यह \ संरक्षित \ नियंत्रकों \ SomeController.php बीटीडब्ल्यू में है जैसे मैंने कहा "http: //localhost/yii/testapp/index.php? R = कुछ" काम करता है ... लेकिन जीआईआई "YetAnotherController.php" (अनुक्रमणिका .php? r = yetAnother) और मेरा "AnotherController.php" (index.php? r = अन्य) अपनी बेस क्लास (SomeController.php) के बारे में त्रुटियां देता है। ऐसा लगता है कि जब यह बेस क्लास है तो कुछ कंट्रोलर.एफ़.पी. की ऑटोलोडिंग के साथ समस्या हो रही है, लेकिन अगर मैं index.php का उपयोग कर रहा हूं तो यह ठीक काम करता है? R = कुछ। साथ ही मुझे एक ही त्रुटि मिल रही है जब मैं एक नियंत्रक के भीतर Post.php का संदर्भ दे रहा हूं ... यह मॉडल/Post.php में है ... –

+0

ओह ठीक है, तो क्या आप यूआरएल से बेस कंट्रोलर तक पहुंचेंगे? या यह सिर्फ एक बेस क्लास है, और आप इसे केवल इस तरह इस्तेमाल करना चाहते हैं? –

+0

मैं सोच रहा था कि क्या मैं दोनों कर सकता हूं? –

3

विस्तार करने के लिए किसी भी वर्ग बस कॉन्फ़िग फ़ाइल पर जाएं और आयात खंड

'import' => array('application.controllers.SomeController')

इस स्पष्ट रूप से आयात किए बिना यह पूरा आवेदन में उपलब्ध हो सकेंगे में वर्ग जोड़ें।

+0

अच्छी टिप के लिए धन्यवाद! – wallerjake

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