【问题标题】:CodeIgniter: Class 'CI_Controller' not found [closed]CodeIgniter:找不到类“CI_Controller”[关闭]
【发布时间】:2011-07-20 07:51:01
【问题描述】:

我通过在 Application/Core 文件夹中添加 MY_Controller.php 来扩展 CodeIgniter 控制器。它工作正常,但是现在当我在Application/errorserror_404.php 页面上添加以下代码时,我得到了错误。

导致问题的代码:

<?php $ci =& get_instance();?>
<?php $this->ci->load->view('header')?>

错误:

Fatal error: Class 'CI_Controller' not found in path\to\system\core\CodeIgniter.php on line 231

system\core\CodeIgniter.php 的第 231 行是:

function &get_instance()
    {
        return CI_Controller::get_instance(); 
    }

我该如何解决这个问题,以便我可以在 error_404.php 中加载视图而不更改系统文件中的任何内容。

PS。我正在使用最新版本。

谢谢。

【问题讨论】:

    标签: codeigniter php


    【解决方案1】:

    我认为 CI_Controller 尚未加载。 Exception 类正在使用 include 处理 404 页面输出。

    在过去,我曾经直接使用includes 来拼凑一个模板,或者对我的 404 页面 URL 发出 file_get_contents() 或 cURL 请求,但他们终于做了一些事情。在 2.0 中,您可以在 routes.php 中定义自定义 404 页面:

    $route['404_override'] = 'controller/method/parameter';
    

    还是not a perfect solution,不过现在最简单的方法就是使用路由。

    注意base_url()."controller/method/parameter"必须是一个有效的url,并且你应该确保在输出页面的控制器中设置一个404标头(由于某种原因它不会自动完成)。

    【讨论】:

    • 如果您使用 Composer 进行自动加载,此错误也可能是由于缺少供应商目录造成的。在这种情况下,通过在您的服务器上运行composer install 来修复(推荐)或通过 FTP 上传无法在您的服务器上运行命令。
    【解决方案2】:

    我在学习 CodeIgniter 教程时遇到了这个问题:http://codeigniter.com/user_guide/tutorial/static_pages.html

    问题是我试图访问网址:

    localhost/CodeIgniter_2.1.1/application/controllers/pages.php

    而不是寻址网址:

    localhost/CodeIgniter_2.1.1/index.php/pages/view

    我知道你问这个问题已经有 18 个月了,但也许它可以帮助其他人:)

    【讨论】:

      【解决方案3】:

      或者你可以试试这个, 也许有点脏,但我认为它对我有用

      将您的异常更新为

      function show_404($page = '', $log_error = TRUE)  {
         if ($log_error)   {
           log_message('error', '404 Page Not Found --> '.$page); 
         } 
         header('Location: http://www.########.###/error/error_404');  
         die();
      }
      

      然后只需创建控制器来处理重定向,也许有不同的错误你可以使用同一个控制器

      这样您将获得动态页眉和页脚

      【讨论】:

        【解决方案4】:

        试试:

        <?php $ci =& get_instance();?>
        <?php $ci->load->view('header')?>
        

        将 CI 实例分配给 $ci 后,您可以在整个文件中使用 $ci->load->view('header)。

        【讨论】:

        • 我也试过了,还是不行。该错误是由第一行引起的,因为即使我删除了第二行,它仍然保持不变。
        猜你喜欢
        • 2012-02-11
        • 2012-12-01
        • 2013-11-04
        • 1970-01-01
        • 2013-02-18
        • 2012-12-08
        • 2018-10-15
        • 1970-01-01
        相关资源
        最近更新 更多