Codeigniter扩展控制器,未找到控制器

Har*_*ten 12 php extends controller codeigniter

在Codeigniter 2.1.2中,我想创建基本控制器,然后从该控制器扩展.它不起作用,我不明白为什么,我现在非常绝望.

\ application\core\MY_Base_Controller.php我有这个:

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

class MY_Base_Controller extends CI_Controller 
{
    function __construct()
    {
        parent::__construct();
...
Run Code Online (Sandbox Code Playgroud)

\ application\controllers\Home.php 我有这个:

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

class Home extends MY_Base_Controller {
Run Code Online (Sandbox Code Playgroud)

并且错误消息是

致命错误:第3行的......\application\controllers\Home.php中找不到类'MY_Base_Controller'

我不知道该怎么做,我在互联网上读到我必须将基本控制器放到核心文件夹我做了什么,我必须用前缀MY_命名基本控制器,我做了.但它仍然没有用.在我的config.php中也是这一行

$config['subclass_prefix'] = 'MY_';
Run Code Online (Sandbox Code Playgroud)

我使用xampp在localhost上运行它

谢谢您的帮助

编辑

有人可以请关注以下链接尝试,并告诉我什么是错的.我刚刚下载了codeigniter试图创建基本控制器并扩展欢迎控制器.不工作.在下面的rar中,只有修改过的文件.谢谢你 http://goo.gl/sKHkDl

编辑2

我可以通过将MY_Base_Controller重命名为MY_Controller实现此功能.这是否意味着,我只能为控制器创建一个扩展类?例如.我不能拥有

  • MY_Base_Auth_Controller
  • MY_Base_Article_Controller

只是而且只有MY_Controller

Web*_*ith 15

我在第一个CI应用程序中遇到了同样的问题,发现需要检查的两个关键元素:

1.案例匹配: 根据您的服务器配置,目录中文件的名称需要与您的类的案例相匹配.例如,在您的类被称为"MY_Controller"的地方,您的文件名将需要是:Linux服务器上的"MY_Controller.php".已知Windows服务器存在大写文件名问题,因此您可以尝试命名控制器"my_controller.php"和/或在config.php中将扩展名更改为"my_"而不是"MY_"

2.插入自动加载功能 由于我不知道的原因,Codeigniter在首次加载核心类之前不会自动识别和读取扩展核心类.这可能会导致您的扩展程序无法正确加载.要解决此问题,您可以将此简单的自动加载脚本添加到config.php的最底部

/*
|--------------------------------------------------------------------------
| Autoload Custom Controllers
|--------------------------------------------------------------------------
|
*/
function __autoload($class) {
    if (substr($class,0,3) !== 'CI_') {
        if (file_exists($file = APPPATH . 'core/' . $class . EXT)) {
            include $file;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

附注:上面的解决方案在CodeIgniter 2.1.4上进行了测试.问题涉及CodeIgniter 2.1.2


Bri*_*sey 10

任何人使用CI 3+阅读此内容并尝试尝试同样的事情.请注意,在删除php 4支持时,全局EXT已被折旧.您现在需要使用以下内容:

/*
|--------------------------------------------------------------------------
| Autoload Custom Controllers
|--------------------------------------------------------------------------
|
*/
function __autoload($class) {
    if (substr($class,0,3) !== 'CI_') {
        if (file_exists($file = APPPATH . 'core/' . $class . '.php')) {
            include $file;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到了同样的问题,但如果我在MY_Controller.php文件中创建了所有控制器,那么一切都运行良好.

<?php

class MY_Controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        // do some stuff
    }
}

class MY_Auth_Controller extends MY_Controller
{
    function __construct()
    {
        parent::__construct();
        // check if logged_in
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个糟糕的做法,你要比修改命名约定问题好得多.(见Websmith的回答) (6认同)
  • 如果每个控制器中有多个控制器和多个功能,那么您将受到影响. (4认同)