我正在尝试关注有关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文件的底部,有些教程会错过这个吗?
提前致谢。
答案 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 log和upgrade instructions。
就结束标记而言: 是可选的,但你应该尽可能避免它,因为它可以为脚本引入空格(在结束标记之后的任何内容),这可能会搞砸标题并显示在输出中。如您所知,用户指南建议您do not use it。
答案 1 :(得分:8)
在CodeIgniter 2.x中,Controller类已重命名为CI_Controller
。当Controller
是要扩展的正确类时,您正在使用的教程很可能使用CodeIgniter 1.7或更早版本。
关于结束?>
标记,CodeIgniter style guide建议省略标记,因为该标记之后的意外空格可能会有问题。