|
以下结果只在本地单机测试成功,如有不足请指正。
本人在扩展Controller类的时候也遇到了无法找到新类的问题,错误代码类似于:
Fatal error: Class 'MY_Base' not found in D:\wamp\www\CodeIgniter\system\application\controllers\main.php on line 3
文件名是MY_Base.php(application\libraries目录下),测试扩展代码如下:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Base extends Controller {
function MY_Base()
{
parent::Controller();
echo "base";
}
}
?>
然后普通控制器继承自MY_Base:
class Main extends MY_Base{
function Main()
{
parent::MY_Base();
}
function index()
{
$this->load->view('main_index');
}
}
结果出现之前所述错误,无法找到MY_Base类,论坛内有仁兄提到用用户文档中演示的MY_Controller扩展原始Controller类并用MY_Controller命名文件和新类名的时候可以正常显示,经过测试确实可以正常扩展并继承新类。但是换成其他名字都出错。
随后我想到ci在搜索类的时候应当是首先根据名称搜索该名称的文件,进而搜索文件内的类,但是只有这样还是无法正常扩展。文档中提到用MY_Controller命名的文件内写入新类来扩展原来的Controller,‘MY_’是前缀,‘Controller’是被扩展的类名,然后文件内的类继承自Controller,然后本人只修改了文件内的类名而斗胆未按照ci中规定的控制器创建方法去用类名命名文件。
然后就产生了一个这样的文件:
文件名是:'MY_Controller.php',而文件内容是:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Base extends Controller {
function MY_Base()
{
parent::Controller();
echo "base";
}
}
?>
然后普通控制器继承自‘MY_Base’,结果终于没有了'Fatal error',并正确打印了扩展类中的“base”字符串,控制器视图也同样调用正常。
既然到了这一步,索性把扩展类'MY_Base'中的前缀'MY_'去掉,只是 'Base extends Controller',结果大家应该能猜到,没有出错没有异常,正常输出......-_-! (原来...是这样......~_~)
如果不出意外,看到这里后大家应该清楚了如何正确的去扩展核心类了,如有不足请多多指正。
最后罗嗦两句,config.php里面的子类前缀'MY_'的实际意义就只是跟文件相关了
|
|