0

我有各种控制器core/名为文件夹,文件夹中的core/my_controller.php其他控制器libraries/libraries/user_controller.php, libraries/frontend_controller.php. 现在我使用下面的代码config.php来自动加载这些文件。但我不认为它的工作。

我看到了这个错误信息Fatal error: Class 'MY_Controller' not found in /home/manumakeadmin/manumake.com/2d/application/libraries/frontend_controller.php on line 3

function __autoload($classname) {

    if (strpos($classname, 'CI_') !== 0) {
        $file = APPPATH . 'libraries/' . $classname . '.php';
        if (file_exists($file) && is_file($file)) {
            @include_once($file);
        }
    }
}

编辑

我可以通过手动将文件包含为

<?php
include_once APPPATH.'core/my_controller.php';

class Frontend_controller extends MY_Controller
{

但我想知道我是否可以让自动加载代码工作

4

2 回答 2

2

这两个链接中还记录了前面提到的自动加载非 ci 类技术

向 config.php 添加一个片段来加载这些类就可以了。

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

并添加你的基类application/core/Base_Controller.php

于 2014-03-24T16:11:04.610 回答
1

库文件名和类名必须匹配并大写- Frontend_controller.php

扩展核心类时,文件名也必须与类名匹配。文件中类名的前缀和首字母大写:MY_Controller.php前缀可以设置在:application/config/config.php

还要确保您的文件在application目录中,而不是system. 这似乎是这种情况,但值得检查。

检查命名约定的用户指南总是一个好主意。例如,模型类名称的第一个字母必须大写,其余小写;文件名应全部小写并与类名匹配。


但是,重要的是要意识到CodeIgniter 中的库并非旨在扩展核心类,例如CI_Controller,我假设MY_Controller它正在扩展。图书馆应该用于:

  • 创建全新的库。
  • 扩展本机库。
  • 替换本机库。

我认为您的Frontend_controller位置可能会更好:application/controllers/

于 2013-05-02T18:34:45.613 回答