2013-05-02 69 views
0

我有各種控制器core/文件夾名爲core/my_controller.php和其他控制器libraries/文件夾爲libraries/user_controller.php,​​。現在我使用下面的代碼config.php來自動加載這些文件。但我不認爲它的工作。Codeigniter自動加載控制器不工作

我看到此錯誤消息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 
{ 

工作,但如果我可以,我想知道使自動加載代碼工作

回答

1

Library file names and class names must match and be capitalised - Frontend_controller.php

extending a core class時,文件名也必須與類名匹配。大寫前綴和類名的文件中的第一個字母:MY_Controller.php前綴可以在設置:application/config/config.php

還要確保您的文件在application目錄,而不是system。這似乎是這種情況,但值得檢查。

檢查user guide的命名約定總是一個好主意。例如,model類名必須具有大寫的第一個字母,其餘小寫;文件名應全部爲小寫,並與類名匹配。


但是,要認識到libraries in CodeIgniter aren't intended for extending core classes,例如CI_Controller,我以爲MY_Controller正在擴展是非常重要的。庫應該用於:

  • 創建全新的庫。
  • 擴展本地庫。
  • 替換原生庫。

我認爲這可能是您的Frontend_controller將更好地位於:application/controllers/

+0

非常感謝。 但是,一旦我在我的linux服務器上做了同樣的事情,並且我收到錯誤消息,因爲我使用大寫字母的文件名來匹配它們與型號名稱 – prakashchhetri 2013-05-03 05:41:05

+0

不用擔心!你是對的 - [模型文件名應該全部小寫](http://ellislab.com/codeigniter/user-guide/general/models.html#anatomy)。檢查用戶指南中的命名慣例總是一個好主意。 – jleft 2013-05-03 07:51:15

2

還有autoloading non-ciclasses technique在這兩個環節記錄和mentioned之前。

將一個片段添加到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