2014-03-07 60 views
4

我已经在Phil's Sturgeon example之后创建了两个控制器,Public_Controller和Admin_Controller在./application/libraries文件夹中。CodeIgniter自动加载特定类

我想要做的是自动加载Public_Controller和Admin_Controller specificly,所以我创建./application/config.php

function __autoload($class) { 

    // Autoload only Public_Controller and Admin_Controller 
    if (strpos($class, 'CI_') !== 0) { 
     $file = APPPATH . 'libraries/'. $class .'.php'; 
     if (file_exists($file) && is_file($file)) { 
      @include_once($file); 
     } 
    } 
} 

这个我认为这个问题在这里面自动加载功能,我有更多的包含在库文件夹内的文件,所以这些文件也是自动加载的,这不是我想要的。所以不是我试图做一个小改动,第一个if语句,就像这样:

if (in_array($class, array('Public_Controller, Admin_Controller'))) // instead of strpos 
为了目标只有这两个类

,但这似乎并没有工作。任何想法我可能做错了什么?

回答

0

我只在前端要自动加载Public_Controller和管理Admin_Controller,所以autoload.php超出。在autoload.php文件全局加载。 __autoload()函数只会在被调用时尝试自动加载类,但未找到。

+0

然后你可以这样做:'$ this-> load-> model('Model_name');'在你想要的控制器里面。 – Albzi

0

没有必要写自动加载功能 笨已经为AUO加载文件,如库和辅助它自己的文件

您可以在特定的阵列

在里面添加类名的文件名应该是“ autoload.php“在应用程序/配置/目录

4

转到applications/config/autoload.php并在那里你可以编辑你所需要的。

他们是在阵列和packageslibrarieshelpersconfiglanguagesmodels分隔。

$autoload['libraries'] = array('database', 'session'); 

$autoload['helper'] = array('url', 'html', 'form'); 
-1

ü不需要写..codeiniter具有自动加载特定文件的ibuilt dunction自动加载功能...

去应用/配置/ autoload.php疗法U可以将您的特定文件添加到阵列中

$autoload['libraries'] = array('database', 'session','your-specific_file'); 
+0

$ autoload ['libraries'] = array('database','session','folder/your-specific_file');我们可以这样做吗? – Angel

+0

autoload假定您已将自定义库放置在由Codeigniter提供的库文件夹中。 – Mohan

+0

是我的代码吧? – Angel

-1

您可以使用您的方法。 __autoload() will NOT自动加载其他类。因为根据PHP文档,

__autoload() - 尝试加载undefined类。当你调用(init)它们时,你的类文件将被“自动”包含在它们中,但不包含这些函数:“include,include_once,require,require_once”。

所以不需要担心其他类会自动。

OR

可以使用CodeIgniter的内置自动加载功能为

打开应用程序/配置/自动加载。PHP文件并添加您想要加载到自动载入数组的项目。您会在对应于每种类型的项目的 文件中找到说明。 - 笨文档

希望这有助于:)

+0

如果Downvoter可以解释为什么这个投票被拒绝,那么他人也会更清楚! – IJas