2012-09-25 8 views
7

मैं/आवेदन पत्र में एक नियंत्रक/कोर हैCodeIgniter HMVC MX_Controller फैली हुई है, get_instance उपयोग करने में असमर्थ ठीक से

/application/core/CMS_Controller.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

require APPPATH."third_party/MX/Controller.php"; 

class CMS_Controller extends MX_Controller { 

    public function __construct() { 
     parent::__construct(); 
    } 

    public function show_something() { 
     echo "something shown"; 
    } 
} 

मैं एक मॉड्यूल में एक और नियंत्रक है (/modules/my_module/controllers/controller.php) जो CMS_Controller

से बढ़ाया

/modules/my_module/controllers/controller.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Controller extends CMS_Controller { 

    public function index() { 
     $this->load->view('view'); 
    } 
} 

और, view.php (/modules/my_module/views/view.php) में मैं यह कर: /modules/my_module/views/view.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
$ci =& get_instance(); 
echo $ci->show_something(); 
?> 

और

Fatal error: Call to undefined method CI::show_something() in /home/gofrendi/public_html/No-CMS/modules/my_module/views/view.php on line 3

यह काम करता है अगर मैं MX_Controller का उपयोग नहीं करते होंगे और इसके बजाय CI_Controller का उपयोग कर: /आवेदन/कोर मैं इस त्रुटि मिलती है ई/CMS_Controller.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

//require APPPATH."third_party/MX/Controller.php"; 

class CMS_Controller extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
    } 

    public function show_something() { 
     echo "something shown"; 
    } 
} 

किसी को पता है कि यहाँ क्या गलत है?

उत्तर

3

आवेदन में/THIRD_PARTY/एमएक्स/Controller.php निर्माता के अंत में (लाइन 54 के बाद) मैं

/* allow CI_Controller to reference MX_Controller */ 
CI::$APP->controller = $this; 

कहा कि यदि आप को देखो कोड $ यह वर्तमान वर्ग को संदर्भित करता है जो एमएक्स_Cंट्रोलर और सीआई :: $ एपीपी सीआई_कंट्रोलर को संदर्भित करता है (एमएक्स/बेस.एफ़पी फ़ाइल देखें)

तो अब यह सरल है ... हम क्या करेंगे CI_Controller के संदर्भ में (सामान्य के अनुसार) प्राप्त करने के लिए

$this->CI =& get_instance(); 

और प्राप्त करने के लिए MX_Controller के संदर्भ में हम आपके उत्तर के लिए

$this->CI =& get_instance()->controller; 
0
मेरे लिए

आप तो मेरे कोशिश यह होगी उदाहरण प्राप्त करने की आवश्यकता नहीं है:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

echo $this->show_something(); 
?> 

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
$ci =& get_instance(); 
echo $ci->show_something(); 
?> 

के बजाय

वैसे भी यह स्वयं के पुस्तकालय की स्थापना की और somenthing करने के लिए अच्छा अभ्यास है जैसे:

$this->load->library('foo_lib'); 
$this->foo_lib->show_somenthing(); 
+0

धन्यवाद करेंगे। लिपि दृश्य पर है। मुझे नहीं लगता कि दृश्य $ यह पहचान सकता है। अभी मेरे पास अभी भी कुछ और करने के लिए है। लेकिन मैं बाद में परिणाम की पुष्टि करूंगा। – goFrendiAsgard

1

मुझे एक ही समस्या थी, मैंने पाया कि यह पोस्ट किया गया है और यह मेरी वेबसाइट का काम करता है, इसे शायद कोशिश करें?

"जब तक आप किसी अन्य नियंत्रक के भीतर नियंत्रक चलाने की योजना बना रहे हैं, तब तक आपको MX_Controller का विस्तार करने की आवश्यकता नहीं है। कई मामलों में कोड को लाइब्रेरी में रखा जाना चाहिए। अन्यथा, आपके नियंत्रक को केवल MY_Controller का विस्तार करना चाहिए।"

यहाँ मिला: http://ellislab.com/forums/viewthread/179478/

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