找不到codeigniter MY_Controller

Posted

技术标签:

【中文标题】找不到codeigniter MY_Controller【英文标题】:codeigniter MY_Controller not found 【发布时间】:2012-11-09 03:19:21 【问题描述】:

我正在为网站使用 Codeigniter.2.1.3,所以我需要扩展 CI_Controller,这样我就可以添加一个与所有控制器一起执行的方法,所以我做了 user_guide 中的操作:

在 application/core 文件夹中创建一个名为 MY_Controller.php 的文件,在其中创建扩展 CI_Controller 的 MY_Controller 类,将我的常规控制器更改为扩展 MY_controller,如下所示: MY_controller.php:

class MY_Controller extends CI_Controller
    protected $page;
    # Constructor
    function __construct ()
        parent::__construct();
        #code shared with all controllers
    
    public function get_page()
        #code to get_the right page here
    

名为Regular.php的常规控制器:

class Regular extends MY_Controller
     public function __construct()
         parent::__construct();
     
     public function index()
          $this->get_page();
     

但不断出现以下错误:

致命错误:在第 2 行的 /var/www/immo/CodeIgniter_2.1.3/application/controllers/regular.php 中找不到类“MY_Controller”

【问题讨论】:

在你的应用程序/config/config.php 中你有什么$config['subclass_prefix'] 您确定 MY_Controller.php 在 application/core 文件夹中吗?此外,如果您在 linux 上,则可能区分大小写 :) 确保文件名与控制器名称相同。 MY_Controller.php,不是MY_controller.php 在MY_Controller后面加一个空格 @Esailija $config['subclass_prefix'] = "MY_" @Jeemusu:是的,它在应用程序/核心文件夹中 【参考方案1】:

您需要包含您的 MY_Controller 类或自动加载它。我建议您通过将以下内容添加到您的 application/config/config.php 文件来自动加载它。

function __autoload($class)

    if (strpos($class, 'CI_') !== 0)
    
        if (file_exists($file = APPPATH . 'core/' . $class . EXT))
        
            include $file;
        
    
 

【讨论】:

为什么我在扩展库时需要这样做,我不需要自动加载它,为什么这是不同的,并且在文档中没有任何内容。 这是由 Phil Sturgeon 创建的关于该技术的原始文章 - philsturgeon.co.uk/blog/2010/02/… 现在仍然无法正常工作,它给了我 2 个新警告:include_once(application/core/MY_Controller.php): failed to open stream: No such file or directory include_once(): 未能打开 'application/core/MY_Controller.php' 以包含 (include_path='.:/var/www/ZendFramework/library') 不知道这意味着在应用程序/核心中有文件 MY_Controller.php 并且它是可读的。【参考方案2】:

确保文件名大小写正确。 Linux 服务器区分大小写。所以如果类名是 My_Controller 那么文件名应该是 My_Controller.php

【讨论】:

里面的控制器类名是什么并不重要。只需拥有MY_Controller.php 即可解决问题。就我而言,我的控制器的名称是 CRM_controller.. :)【参考方案3】:

$config['subclass_prefix'] = "MY_"

config.php 中检查,当然您应该在控制器名称中使用它,例如MY_Controller.php 并命名为“class MY_Controller....”

【讨论】:

【参考方案4】:

config/config.php

/* load class in core folder */
function my_load($class)         

    if (strpos($class, 'CI_') !== 0)             
        if (is_readable(APPPATH . 'core' . DIRECTORY_SEPARATOR . $class . '.php' ))                 
            require_once (APPPATH . 'core' . DIRECTORY_SEPARATOR . $class . '.php');                
        
    



spl_autoload_register('my_load');

【讨论】:

尽管所有其他解决方案确实有点道理,但这是唯一真正有帮助的解决方案。我相信核心文件夹中的类在我的情况下不会超载,因为我从 2.x 升级到 CodeIgnitor 3.x(但这需要确认)并且我可能在此过程中忘记了一些东西......【参考方案5】:

这个答案迟到了,但我得到了

“致命错误:找不到类‘MY_Controller’”错误

当我在 web 根目录而不是 application/controllers 目录中有一个同名的控制器 (.php) 文件时。

实际上不知道它是如何到达那里的,但是当我删除它时问题就消失了。

【讨论】:

以上是关于找不到codeigniter MY_Controller的主要内容,如果未能解决你的问题,请参考以下文章

无缘无故找不到Codeigniter 404页面

找不到对象! codeigniter 项目中的错误 404

CodeIgniter:在 Live Server 上找不到 404 页面

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

CodeIgniter:如果 Active Record 找不到任何数据,则返回 FALSE

在加载资产时找不到 codeigniter 404