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

3pvhb19x  于 2022-12-07  发布在  其他
关注(0)|答案(6)|浏览(218)

在Codeigniter 2.1.2中,我想创建一个基本控制器,然后从这个控制器扩展。它不工作,我不知道为什么,我现在非常绝望。
在**\应用程序\核心\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();
...

在**\application\controllers\Home.php**中,我有以下内容:

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

class Home extends MY_Base_Controller {

错误消息为

致命错误:在第3行的...\应用程序\控制器\Home.php中没有找到类'MY_Base_Controller'

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

$config['subclass_prefix'] = 'MY_';

我在本地主机上使用xampp运行这个
谢谢你的帮忙

编辑

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

编辑2

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

*我的基本身份验证控制器
*我的基本商品控制器
我的控制器

2uluyalo

2uluyalo1#

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

**1.大小写匹配:**根据您的服务器配置,目录中的文件名需要与类的大小写匹配。例如,当类名为“MY_Controller”时,文件名需要为:在Linux服务器上运行“MY_Controller.php”。Windows服务器存在文件名大写的问题,因此您可以尝试将您的控制器命名为“my_Controller.php”和/或将config.php中的扩展名改为“my_”而不是“MY_”。
2.插入一个Autoloading函数由于我不知道的原因,Codeigniter在第一次加载核心类之前不会自动识别和读取扩展的核心类。这可能会导致扩展不能正确加载的问题。要解决这个问题,你可以在config.php的最底部添加这个简单的autoloading脚本

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

***旁注:***上面的解决方案是在CodeIgniter 2.1.4上测试的。提出的问题涉及CodeIgniter 2.1.2

jq6vz3qz

jq6vz3qz2#

任何使用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;
        }
    }
}
yacmzcpb

yacmzcpb3#

我也遇到了同样的问题,但是如果我在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
   }
}
xwbd5t1u

xwbd5t1u4#

是的,使用核心的MY_ classes,您只能覆盖codeigniter框架实体,如控制器、模型、配置、异常等。请参阅https://ellislab.com/codeigniter/user-guide/general/core_classes.html

ebdffaop

ebdffaop5#

我也面临同样的问题。我认为问题是,CI只加载一个文件,必须命名为“MY_controller.php”。(system/core/Codeigniter.php -第238行)。它只用于加载“MY_Controller.php”。上面的答案像“_autoload”一样,因为我们覆盖了这个功能。我猜它在CI-2和CI - 3中都有。我们可以在核心文件中进行更改,也可以使用autload函数,如上所述。
谢谢你,

pbwdgjma

pbwdgjma6#

我想找到了解决方案,当扩展时,你需要使用require_once来查找类的文件。

require_once(APPPATH."controllers/Admin.php");
defined('BASEPATH') OR exit('No direct script access allowed');
class MySubClass extends Admin{
}

相关问题