2011-07-20 72 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(); 
} 

然後就創建控制器來處理重定向,也許不同的錯誤,你可以使用相同的控制器

這樣你就會得到你的動態頁眉和頁腳