控制器无法使用get
我在/ 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";
}
}
我在模块中有另一个控制器(/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();
?>
我得到这个错误:
致命错误:在第3行调用未定义的方法CI :: show_something()/home/gofrendi/public_html/No-CMS/modules/my_module/views/view.php
如果我不使用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";
}
}
有人知道这里有什么问题吗?
在应用程序/第三方/ 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;
我有同样的问题,发现后,它使我的网站的工作,试试也许吧?
“除非你打算在另一个控制器中运行一个控制器,否则你不需要扩展MX_Controller,在很多情况下代码都被放入库中,否则控制器应该只扩展MY_Controller。”
在这里找到:http://ellislab.com/forums/viewthread/179478/
对我来说,你不需要获取实例,所以我的尝试是这样的:
<?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();
链接地址: http://www.djcxy.com/p/64247.html
上一篇: Controller, unable to use get
下一篇: How to handle WinRT exceptions that result in Exception?