【问题标题】:Extending CodeIgniter core classes扩展 CodeIgniter 核心类
【发布时间】:2023-03-12 07:42:01
【问题描述】:

我的核心文件夹中有 2 个控制器:

  1. MY_Controller
  2. MY_AdminController

两者都扩展了 CI_Controller。第一个效果很好,但第二个不行,当我调用从 MY_AdminController 继承的控制器时出现错误:

Fatal error: Class 'MY_AdminController' not found

经过一番研究,我发现:

https://codeigniter.com/user_guide/general/core_classes.html

在本文档中,它说您使用“MY_”前缀(可以在配置中更改它)来扩展核心类,我正在这样做。

我错过了什么?

更新 我想知道问题是否是因为我在“核心”文件夹中创建了一个文件,CI 检查它是否在其自己的核心上确实存在同名但前缀为 CI 的原始文件?

【问题讨论】:

  • 确保您的文件名与类 application core/MY_Admincontroller.php 匹配
  • @wolfgang1983 感谢您的回答。我已经编辑了我的问题,这是一个错字,在我的代码中,我与类名和文件名相同
  • 没有 CI_Admincontroller,所以你不能扩展不存在的东西。
  • 我正在扩展 CI_Controller @BrianGottier

标签: codeigniter inheritance codeigniter-3


【解决方案1】:

允许任何新类。表示系统/核心中定义了哪些类 解决方法如下。

尝试将下面的函数放在配置文件的底部

/application/config/config.php

function __autoload($class) {
    if(strpos($class, 'CI_') !== 0)
    {
        @include_once( APPPATH . 'core/'. $class . '.php' );
    } }

My core class My_head not found in codeigniter

【讨论】:

    【解决方案2】:

    这里是a good explanation,为什么你不能按照你描述的方式做。本质上 CodeIgniter 寻找['subclass_prefix'] . $Classname,例如'MY_' . 'Controller'。这是CI2的相同问题

    解决方案:
    MY_ControllerMY_AdminController 都放入MY_Controller.php

    MY_Controller.php

    class MY_Controller extends CI_Controller {
        public function __construct() {
            parent::__construct();
        }
    
        ...
    }
    
    class MY_AdminController extends CI_Controller {
        public function __construct() {
            parent::__construct();
        }
    
        ...
    }
    

    【讨论】:

    • 我会试试的。不包括同一文件中的类,但在其中使用 require,我喜欢保持控制器文件可见。
    • 好主意,最好每个文件一个类
    • 我又发了一个问题,也许你能帮忙:stackoverflow.com/questions/46368601/…
    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 2013-08-14
    • 2015-12-03
    • 2012-09-26
    • 2011-12-21
    相关资源
    最近更新 更多