2011-07-20 45 views
5

我已经通过在Application/Core文件夹中添加MY_Controller.php来扩展CodeIgniter控制器。它工作正常,但现在,当我在error_404.php页面Application/errors上添加以下代码时,出现错误。CodeIgniter:未找到'CI_Controller'类

代码引起的问题:

<?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(); 
    } 

我怎样才能解决这个问题,使我可以加载vie w在error_404.php中不改变系统文件中的任何内容。

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

谢谢。

回答

4

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

在过去,我过去一直使用直接include s拼接模板,或者对我的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"必须是有效的网址,并且您应该确保在输出页面的控制器中设置404标头(由于某种原因它不会自动完成)。

+0

如果您使用Composer进行自动加载,则此错误也可能是由于缺少供应商目录导致的。在这种情况下,通过在您的服务器上运行'composer install'(推荐)或通过FTP上传修复无法在您的服务器上运行命令。 –

0

尝试:

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

一旦你分配CI的实例$词你可以在你的文件中使用$ CI->负载>视图(“标题中)。

+0

我也试过这样,不起作用。该错误是由第一行引起的,因为即使我删除第二行,它也保持不变。 – Roman

4

我有以下的笨教程这里的时候,这个问题:http://codeigniter.com/user_guide/tutorial/static_pages.html

问题是我试图访问的网址:

本地主机/ CodeIgniter_2.1.1 /应用/控制器/ pages.php

而不是寻址url:

localhost/CodeIgniter_2.1.1/index。PHP /网页/视图

我知道它已经18个月左右,因为你问这个问题,但也许它可以帮助别人:)

4

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

更新您的例外

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(); 
} 

然后就创建控制器来处理重定向,也许不同的错误,你可以使用相同的控制器

这样你就会得到你的动态页眉和页脚