【问题标题】:Codeigniter - CI_Controller vs ControllerCodeigniter - CI_Controller 与控制器
【发布时间】:2011-04-10 18:18:06
【问题描述】:

我正在尝试关注一些关于 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 标签?&gt; 添加到 MY_Controller 文件的底部,一些教程错过了这个?

提前致谢。

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    在 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

    【讨论】:

    • 谢谢,这完全有道理。
    • 哇,谢谢!在找到这个之前,我到处搜索。是时候更新“入门”视频了,因为它不起作用。
    【解决方案2】:

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

    关于结束 ?&gt; 标记,CodeIgniter style guide 建议省略它,因为该标记后的意外空白可能会造成问题。

    【讨论】:

    • 也谢谢你,你一定来​​不及了!
    • @James - 如果您查看时间戳(将鼠标悬停在时间上),我的会首先发布。不过不用担心。
    • 仅供参考,控制器现在不仅是 CI_Controller,而且模型等也以相同的方式发生了变化,例如CI_Model 等...
    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2012-12-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多