我在/ application / core
中有一个控制器/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";
}
}
我在CMS_Controller扩展的模块(/modules/my_module/controllers/controller.php)中有另一个控制器
/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();
?>
我收到了这个错误:
致命错误:调用未定义的方法CI :: show_something()in /home/gofrendi/public_html/No-CMS/modules/my_module/views/view.php on 第3行
如果我不使用MX_Controller并使用CI_Controller,它将起作用: 的 /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 CI_Controller {
public function __construct() {
parent::__construct();
}
public function show_something() {
echo "something shown";
}
}
有人知道这里有什么问题吗?
答案 0 :(得分:3)
在application / third_party / MX / Controller.php中 在构造函数的末尾(在第54行之后) 我添加了
/* allow CI_Controller to reference MX_Controller */
CI::$APP->controller = $this;
如果查看代码$ this指的是当前类,它是MX_Controller,CI :: $ APP是指CI_controller(查看MX / Base.php文件)
所以现在很简单...... 获取对CI_Controller的引用 我们会做(按照正常情况)
$this->CI =& get_instance();
要获得对MX_Controller的引用,我们将做
$this->CI =& get_instance()->controller;
答案 1 :(得分:1)
我有同样的问题,发现帖子和它让我的网站工作,试试吧?
&#34;除非您计划在另一个控制器中运行控制器,否则不需要扩展MX_Controller。在很多情况下,代码被放入库中。否则,您的控制器应该只扩展MY_Controller。&#34;
答案 2 :(得分: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();
?>
无论如何,最好设置自己的库并像下面这样做:
$this->load->library('foo_lib');
$this->foo_lib->show_somenthing();