Codeigniter - CI_Controller与Controller

时间:2011-04-10 18:18:06

标签: codeigniter

我正在尝试关注有关CodeIgniter的一些教程,特别是有关扩展控制器的教程,我接下来的教程说我在MY_Controller文件中应该放置以下内容:

    <?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class MY_Controller extends Controller
{
    function __construct()
    {
        parent::__construct();
    }
}  

然而,当我这样做时,我收到以下错误:

致命错误:第3行/home/chimeri1/public_html/application/libraries/MY_Controller.php中找不到“控制器”类

但是如果我放CI_Cntroller而不是Controller它就可以了。差异是什么?

也应该将关闭的php标记?>添加到MY_Controller文件的底部,有些教程会错过这个吗?

提前致谢。

2 个答案:

答案 0 :(得分:21)

在2之前的任何版本中,Controller是基本控制器类(您将使用MY_Controller进行扩展)。在版本2及更高版本中,您需要扩展CI_Controller,因为这是基本控制器类的新名称。

对于遇到此问题的其他人,CI2将几个类文件从/libraries移动到新的/core目录。如果您查看system/core,那么您看到的每个课程现在都使用CI_前缀 - 包括模型(现在为CI_Model),输入,加载程序,Lang等等。如果需要重载或扩展这些库,它们现在需要位于application/core目录中。您仍然会使用MY_前缀来扩展它们,或者在$config['subclass_prefix']中设置的任何内容。

随着版本2的发布,CI分为两个分支:Core和Reactor。不要混淆 - 它们都是CodeIgniter,但对“Reactor”的任何引用都是当前社区驱动的版本,它是作为网站上的主要下载提供的,而Core是较旧的EllisLabs版本,具有较少的功能。来自CI网站:

  

“简单地说,Reactor = CodeIgniter”。

您可以阅读有关分支更改的更多信息here

从1.7.2升级到2.X很容易。与往常一样,请务必在更新到新版本时阅读change logupgrade instructions

就结束标记而言: 是可选的,但你应该尽可能避免它,因为它可以为脚本引入空格(在结束标记之后的任何内容),这可能会搞砸标题并显示在输出中。如您所知,用户指南建议您do not use it

答案 1 :(得分:8)

在CodeIgniter 2.x中,Controller类已重命名为CI_Controller。当Controller是要扩展的正确类时,您正在使用的教程很可能使用CodeIgniter 1.7或更早版本。

关于结束?>标记,CodeIgniter style guide建议省略标记,因为该标记之后的意外空格可能会有问题。