【发布时间】:2013-02-13 14:17:07
【问题描述】:
我最近将我的 codeigniter 版本从 1.7 升级到了 2.1。但是,我正在努力扩展我的 my_controller 类,以前它在放入 app->libraries 文件夹时工作正常。
用CI指令我也把它移到app -> core目录下,代码如下:
class MY_Controller extends CI_Controller
{
var $data=array();
var $secured=false;
var $area="user";
function my_Controller(){
parent::__construct();
// loading libraries etc
$this->load->library('session');
$this->load->helper('url');
$this->load->helper('common');
[..]
在配置文件中,我添加了以下代码行,如本教程所示:
http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-base-Classes-Keeping-it-DRY
/*
| -------------------------------------------------------------------
| Native Auto-load
| -------------------------------------------------------------------
|
| Nothing to do with cnfig/autoload.php, this allows PHP autoload to work
| for base controllers and some third-party libraries.
|
*/
function __autoload($class)
{
if(strpos($class, 'CI_') !== 0)
{
@include_once( APPPATH . 'core/'. $class . EXT );
}
}
但我仍然收到以下 PHP 错误:
PHP 致命错误:在第 5 行的 C:\inetpub\wwwroot\latestCI\application\controllers\home.php 中找不到类 'MY_Controller'
知道为什么这不起作用,谢谢
编辑:
似乎已经让它工作了。基本上 MY_Controller 必须遵循这个结构:
<?php
class MY_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
//constructor code here
}
//Custom functions here
}
?>
否则会报错。
【问题讨论】:
-
您是否尝试过将其移入库文件夹?
-
是的,这是我做的第一件事。
-
尝试删除您在配置文件中添加的行并检查
-
还是不行。 :(
-
代码中有一些不好的做法。使用
__construct()而不是function my_Controller()。使用public而不是var。为了便于阅读,请明确调用函数public/private/protected这些不会解决您的问题,但现在是我们应该适应新的设计和语法的时候了。
标签: php codeigniter